Python学习之爬虫03-自动模拟HTTP请求与百度信息自动搜索
基础概念:
网页的请求分很多中,其中最常用的是post
和get
。
-
get
请求格式:网页链接中
xxx.html?字段名=值&字段名=值
实例:爬取百度前5页的标题,搜索内容为 Python
import urllib.request # 导包时可以在上一个包后面加问号,再加上另一个包 import re keywd="Python" keywd=urllib.request.quote(keywd) # 注意转码,浏览器的网址框不接受中文字符,需要转码处理但是Python不会自动帮我们转码,所以我们这调用quote()函数来转码 for i in range(1,6): # 这里循环是因为要使用Python自动读取前5页的数据 url="http://www.baidu.com/s?wd="+keywd+"&pn="+str((i-1)*10) # 拼接成链接,格式的话需要自己提前查看,找到规律然后再拼接出来 data=urllib.request.urlopen(url).read().decode("utf-8") # 读取链接到的HTML文件 pat="title:'(.*?)'," pat2='"title":"(.*?)",' rst1=re.compile(pat).findall(data) # 使用正则来匹配标题,注意:这里有两个匹配是因为匹配时,获取标题的格式可能不同,这里有两个,所以写两种,但其实是可以综合在一起的 rst2=re.compile(pat2).findall(data) for j in range(0,len(rst1)): # 输出数据 print(rst1[j]) for z in range(0,len(rst2)): print(rst2[z])
-
post
请求一般你填写的表单都是使用post提交的,因为使用post提交时是无法直接在浏览器的链接栏中看到明文的账号和密码的。
这里测试和联系的话,我使用学习视频中的地址。
在HTML文件中,输入栏的input标签,我们主要要注意这个标签的name属性。
#post请求实战 import urllib.request import urllib.parse # 表单的内容需要转码,这里用到parse这个包下的方法来转码,账号和密码在提交的时候是k-V形式 posturl="http://....../" # post请求链接不变 postdata=urllib.parse.urlencode({ # 设置要提交的表单 "name":"[email protected]", # 注意:提交的表单都是键值对形式 "pass":"kjsahgjkashg", }).encode("utf-8") #进行post,就需要使用urllib.request下面的Request(真实post地址,post数据) req=urllib.request.Request(posturl,postdata) # post请求使用Request方法 rst=urllib.request.urlopen(req).read().decode("utf-8") # 获取post请求后返回的数据 print(rst)