Python爬虫流程
主要分为三个部分 (1)获取网页-------->(2)解析网页(获取数据)--------->存储数据
三个流程的技术实现
1.获取网页
-获取网页的技术基础:urllib、requests、selenium
-获取网页的进阶技术:多线程抓取、登录抓取、突破ip限制和服务器抓取
2.解析网页
-解析网页的技术基础:re正则表达式、BeautifulSoup和xml
-解析网页的进阶技术:解决中文乱码问题
3.存储数据
-存储数据的基本技术:存入txt文件和存入csv文件
-存储数据的进阶技术:存储mysql、mongoDB数据库中
搭建Python爬虫的平台
- Python的安装
- 集成环境Anaconda的安装
- 使用pip工具安装第三方库
urllib.request
urllib中,request这个模块主要负责构造和发起网络请求,并在其中加入Headers,Proxy等。
发起GET请求
主要使用urlopen()方法发起请求
from urllib import request
resp = request.urlopen('http://www.baidu.com') type(resp)
print(resp.read().decode()) 数据为二进制数据需转码
发起POST请求
urlopen()默认的访问方式为GET,当在urlopen()方法中传入data参数时,则会发起pose请求
注意:传入的data数据需要为bytes格式
设置timeout参数还可以设置超时时间,如果请求时间超出,那么会抛出异常
from urllib import request
resp = request.urlopen('http://httpbin.org', data=b'word=hello', timeout=10)
print(resp.read().decode())
添加Headers
通过urllib发起的请求会有默认的一个Headers:"User-Agent":Python-urllib/3.6",指明请求是由urllib发送的。
**所以遇到一些验证User-Agent的 网站时,我们需要自定义Headers,而这需要借助于urllib.request中的Request对象。
from urllib import request
url = 'http://httpbin.org/get'
headers = {'user-agent': 'Mozilla/5.0 xxxxxxxxxxxxxxxxxxxxxx'}
**需要使用url和headers生成一个Request对象,然后将其传入urlopen方法中
req = request.Request(url, headers=headers)
resp = request.urlopen(req)
print(resp.read().decode())
Request对象
如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能。Request对象如下所示:
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
构造Request对象必须传入url参数, data数据和headers都是可选的。
Request方法可以使用method参数来自由选择请求的方法,如PUT, DELETE等等,默认为GET方法。
添加Cookie
为了在请求时能带上Cookie信息,我们需要重新构造一个opener
使用request.build_opener方法进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。
User_Agent: