python3 爬虫五大模块之三:网页下载器
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: chengdufrom fake_useragent import UserAgent
from urllib import request
from urllib import errorclass 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 = Nonereturn 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 UserAgentusers = 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
'''
python3 爬虫五大模块之三:网页下载器相关推荐
- Python3爬虫之Scrapy框架的下载器中间件
Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...
- Python爬虫----网页下载器和urllib2模块及对应的实例
网页下载器:将互联网上URL对应的网页下载到本地的工具,是爬虫的核心组件 urllib2下载网页的三种方法 对应实例代码如下: #coding:utf8import urllib2 url = 'ht ...
- python3.4.4实现网页爬虫基础之网页下载器三种方法
这是是慕课网<Python开发简单爬虫>中网页下载器的三种实现方法,课程用的是python2.7,这里用最新的3.4.4实现出来,分享给新人: import urllib.request ...
- 简单的爬虫架构和网页下载器requests
目录 简单的爬虫架构: 网页下载器: URL管理器: 网页解析器: 网页下载器requests: 发送requests请求: 接收requests请求: requests操作实例: 简单的爬虫架构: ...
- Python爬虫:URL管理器及其实现方式、网页下载器、网页解析器原理及其实现原理!
Python爬虫之URL管理器: Python爬虫:URL管理器实现方式: Python爬虫之网页下载器: urllib2实现网页下载器的三种方法: 具体代码: ...
- Python爬虫之网页下载器网页解析器
一.网页下载器 -- urllib2的三种网页下载方法 import cookielib import urllib2url = "http://www.baidu.com" pr ...
- Python轻量级爬虫教程-网页下载器
爬虫简介: 抓取自己想要的的类别网页上的数据. 爬虫架构: 爬虫调度端 爬虫:URL管理器, 网页下载器,网页解析器 数据: 爬虫运行流程: URL管理器: 管理待抓取URL集合和已抓取URL集合: ...
- 用 python 实现一个多线程网页下载器
今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...
- java爬虫写一个百度图片下载器
文章目录 img_download 1.0 看看效果吧 2.0 了解一下 "图片下载器软件" 目录结构 3.0 如何使用? 4.0 源码剖析 5.0 项目地址 6.0 写在最后的话 ...
最新文章
- 32岁程序员面试被拒:比又穷又忙更可怕的,是2020年你还不懂...
- mysql之DDL操作--数据库
- 发送IP和MAC地址的方法
- python项目部署nginx_详解使用Nginx和uWSGI配置Python的web项目的方法
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love counting(Trie树)
- POJ 2240题(Floyd)
- Kafka笔记-kafka外网搭建及构建生产者
- 提高测试脚本复用性降低DOM结构引起路径变化的影响
- qbittorrent container 改共享文件_SSH连接docker中的container
- python3 re模块_python3+ 模块学习 之 re
- 新手必读:PhoneGap入门六大问题
- 完整缓和曲线和非完整缓和曲线交点法坐标计算应用
- 我的第一个hbulider项目
- html5制作新年祝福,2018新年祝福贺卡制作
- SOEM-Ethercat源代码解析一(数据类型定义)
- 什么是5G advanced
- 数学建模 多属性决策模型
- 对偶方法(Dual Methods)
- ERROR 2003 ( HY000 ) : Can ‘t connect to MySQL server on ‘ xxx.xxx.xxx.xxx ‘,
- python算法一:枚举法