网络爬虫(Web Crawler),又叫网络蜘蛛、网络机器人,是一种自动化数据采集程序
数据采集 → 数据处理 → 数据存储
常见的工作流程如下:
1.定义采集的目标(网站、APP、公众号、小程序),发送网络请求获取数据
2.当向目标发起请求,遇到对方服务器无响应或提示其他错误时,进行发起指定次数的重新请求
3.对获取到的数据进行重新处理,提取出需要的信息
4.将提取到的数据进行保存,可保存在文件、数据库中
5.继续循环进行下一轮任务的执行,直到所有爬取任务执行完毕
urllib网络请求库
urllib是python内置的一个用于网络请求的库,可以实现模拟浏览器发送HTTP请求并获取请求返回结果
请求一个简单的网页并设置请求超时
urllib.request模块
urlopen()
方法可以对网页发起请求并获取返回结果
import urllib.request
url = 'http://www.baidu.com/'
r = urllib.request.urlopen(url,timeout=3) # 请求超过3秒未响应内容,舍弃或重新尝试访问
html = r.read() # read()方法可以拿到真正的网页源代码
html.decode('utf-8') # 有乱码时,可以通过decode()方法对字符串进行解码
timeout
=3:请求超过3秒未响应内容,舍弃或重新尝试访问
read()
方法可以拿到真正的网页源代码
有乱码时,可以通过decode()
方法对字符串进行解码
使用data参数提交数据
data
必须是字节流编码格式的内容,即bytes
类型,通过bytes()
函数可以进行转换
传递了data参数,请求方式为POST
http://httpbin.org/
urllib.parse.urlencode()
将提交的data字典数据转化为str
bytes()
转换为字节流·
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word':'22222'}),encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
response.read()
b’{\n “args”: {}, \n “data”: “”, \n “files”: {}, \n “form”: {\n “word”: “22222”\n }, \n “headers”: {\n “Accept-Encoding”: “identity”, \n “Content-Length”: “10”, \n “Content-Type”: “application/x-www-form-urlencoded”, \n “Host”: “httpbin.org”, \n “User-Agent”: “Python-urllib/3.7”, \n “X-Amzn-Trace-Id”: “Root=1-64fff907-00a9118873eff0da107e28f2”\n }, \n “json”: null, \n “origin”: “117.136.56.234”, \n “url”: “http://httpbin.org/post”\n}\n’
urllib.request.Request()
url = 'https://www.baidu.com/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
}
request = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(request)
response.read().decode('utf-8')
百度网站对请求的headers信息进行了验证,直接使用Request()请求,默认的User-Agent是Python-urllib/版本号,百度会识别出来是程序在访问,会对其进行拦截