Python的爬虫框架主要可以分为以下五个部分:
爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义;
URL管理器:负责URL的管理,包括带爬取和已爬取的URL、已经提供相应的接口函数(类似增删改查的函数)
网页下载器:负责通过URL将网页进行下载,主要是进行相应的伪装处理模拟浏览器访问、下载网页
网页解析器:负责网页信息的解析,这里是解析方式视具体需求来确定
信息采集器:负责将解析后的信息进行存储、显示等处理
代码示例是爬取CSDN博主下的所有文章为例,文章仅作为笔记使用,理论知识rarely
一、网页下载器简介
网页下载器负责根据URL来下载网页。
很多网站有类似的简单防爬措施(比较复杂的我不清楚、目前也不会处理),因此在下载网页时需要进行模拟浏览器的操作,为request操作添加相应的信息。
框架如下:
\'\'\' 自定义Python伪代码 \'\'\' # 最简单的框架 # 0. 添加头部信息 headers = {} # 1. 求请访问一个网站URL : request.Request(url, headers=headers) # 2. 获得请求应答: request.urlopen(url_request) # 3. 解析应答 # 1)url_response.read(): 获取应答的数据内容 # 2)decode(\'utf-8\'): 将获取应答的数据内容转换为utf-8格式,便是观察显示二、网页下载器示例:(爬取CSDN博主下的所有文章)
# author : sunzd # date : 2019/3/22 # position: chengdu from fake_useragent import UserAgent from urllib import request from urllib import error class HtmlDownloader(object): def downloader(self, url): if url is None: print("downloader: Url is None") return None # 设置用户代理 # headers = {\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\'} # 使用伪代理fake UserAgent进行访问 headers = {\'User-Agent\': str(UserAgent().random)} # print(url) req = request.Request(url, headers=headers) try: html = request.urlopen(req).read() except error.URLError as e: print("download error:", e.reason) html = None return html三、上述代码用到的知识点:
1. 职业生成模拟浏览器头部信息:
from fake_useragent import UserAgent可以通过pip直接进行安装。在Pycharm下的安装如下:
headers = {\'User-Agent\': str(UserAgent().random)} # 构造头部信息UserAgent() 可以生成多个浏览器的信息,UserAgent().random 则每次随机选取其中一个信息:
# author : sunzd # date : 2019/3/23 # position: chengdu \'\'\' 测试fake_useragent的信息 \'\'\' from fake_useragent import UserAgent users = UserAgent() \'\'\' users = UserAgent().data_browsers # 浏览器类型 chrome opera firefox internetexplorer safari \'\'\' print(users.chrome) print(users.opera) print(users.firefox) print(users.internetexplorer) print(users.safari) \'\'\' Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205 Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 \'\'\'