Python学习网络爬虫主要分3个大的版块:抓取,分析,存储。

另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。

首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:

学习Python中有不明白推荐加入交流群

号:943752371

群里有志同道合的小伙伴,互帮互助,

群里有不错的视频学习教程和PDF!

简单来说这段过程发生了以下四个步骤:

查找域名对应的IP地址。

向IP对应的服务器发送请求。

服务器响应请求,发回网页内容。

浏览器解析网页内容。

网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。

抓取

这一步,你要明确要得到的内容是什么?是HTML源码,还是Json格式的字符串等。

1. 最基本的抓取

抓取大多数情况属于get请求,即直接从对方服务器上获取数据。

首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面抓取。另外,requests也是非常有用的包,与此类似的,还有httplib2等等。

Requests:

import requests

response = requests.get(url)

content = requests.get(url).content

print "response headers:", response.headers

print "content:", content

Urllib2:

import urllib2

response = urllib2.urlopen(url)

content = urllib2.urlopen(url).read()

print "response headers:", response.headers

print "content:", content

Httplib2:

import httplib2

http = httplib2.Http()

response_headers, content = http.request(url, 'GET')

print "response headers:", response_headers

print "content:", content

此外,对于带有查询字段的url,get请求一般会将来请求的数据附在url之后,以?分割url和传输数据,多个参数用&连接。

data = {'data1':'XXXXX', 'data2':'XXXXX'}

Requests:data为dict,json

import requests

response = requests.get(url=url, params=data)

Urllib2:data为string

import urllib, urllib2

data = urllib.urlencode(data)

full_url = url+'?'+data

response = urllib2.urlopen(full_url)

2. 对于登陆情况的处理

2.1 使用表单登陆

这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。

data = {'data1':'XXXXX', 'data2':'XXXXX'}

Requests:data为dict,json

import requests

response = requests.post(url=url, data=data)

Urllib2:data为string

import urllib, urllib2

data = urllib.urlencode(data)

req = urllib2.Request(url=url, data=data)

response = urllib2.urlopen(req)

2.2 使用cookie登陆

使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。

import requests

requests_session = requests.session()

response = requests_session.post(url=url_login, data=data)

若存在验证码,此时采用response = requests_session.post(url=url_login, data=data)是不行的,做法应该如下:

response_captcha = requests_session.get(url=url_login, cookies=cookies)

response1 = requests.get(url_login) # 未登陆

response2 = requests_session.get(url_login) # 已登陆,因为之前拿到了Response Cookie!

response3 = requests_session.get(url_results) # 已登陆,因为之前拿到了Response Cookie!

3. 对于反爬虫机制的处理

3.1 使用代理

适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。

这种情况最好的办法就是维护一个代理IP池,网上有很多免费的代理IP,良莠不齐,可以通过筛选找到能用的。对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。

proxies = {'http':'http://XX.XX.XX.XX:XXXX'}

Requests:

import requests

response = requests.get(url=url, proxies=proxies)

Urllib2:

import urllib2

proxy_support = urllib2.ProxyHandler(proxies)

opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)

urllib2.install_opener(opener) # 安装opener,此后调用urlopen()时都会使用安装过的opener对象

response = urllib2.urlopen(url)

3.2 时间设置

适用情况:限制频率情况。

Requests,Urllib2都可以使用time库的sleep()函数:

import time

time.sleep(1)

3.3 伪装成浏览器,或者反“反盗链”

有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。

headers = {'User-Agent':'XXXXX'} # 伪装成浏览器访问,适用于拒绝爬虫的网站

headers = {'Referer':'XXXXX'}

headers = {'User-Agent':'XXXXX', 'Referer':'XXXXX'}

Requests:

response = requests.get(url=url, headers=headers)

Urllib2:

import urllib, urllib2

req = urllib2.Request(url=url, headers=headers)

response = urllib2.urlopen(req)

4. 对于断线重连

def multi_session(session, *arg):

retryTimes = 20

while retryTimes>0:

try:

return session.post(*arg)

except:

print '.',

retryTimes -= 1

或者

def multi_open(opener, *arg):

retryTimes = 20

while retryTimes>0:

try:

return opener.open(*arg)

except:

print '.',

retryTimes -= 1

这样我们就可以使用multi_session或multi_open对爬虫抓取的session或opener进行保持。

5. 多进程抓取

这里针对华尔街见闻进行并行抓取的实验对比:Python多进程抓取 与 Java单线程和多线程抓取

6. 对于Ajax请求的处理

对于“加载更多”情况,使用Ajax来传输很多数据。

它的工作原理是:从网页的url加载网页的源代码之后,会在浏览器里执行JavaScript程序。这些程序会加载更多的内容,“填充”到网页里。这就是为什么如果你直接去爬网页本身的url,你会找不到页面的实际内容。

这里,若使用Google Chrome分析”请求“对应的链接(方法:右键审查元素Network清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。

如果“请求”之前有页面,依据上一步的网址进行分析推导第1页。以此类推,抓取抓Ajax地址的数据。

对返回的json格式数据(str)进行正则匹配。json格式数据中,需从’\uxxxx’形式的unicode_escape编码转换成u’\uxxxx’的unicode编码。

7. 自动化测试工具Selenium

Selenium是一款自动化测试工具。它能实现操纵浏览器,包括字符填充、鼠标点击、获取元素、页面切换等一系列操作。总之,凡是浏览器能做的事,Selenium都能够做到。

这里列出在给定城市列表后,使用selenium来动态抓取去哪儿网的票价信息的代码。

8. 验证码识别

对于网站有验证码的情况,我们有三种办法:

使用代理,更新IP。

使用cookie登陆。

验证码识别。

使用代理和使用cookie登陆之前已经讲过,下面讲一下验证码识别。

可以利用开源的Tesseract-OCR系统进行验证码图片的下载及识别,将识别的字符传到爬虫系统进行模拟登陆。当然也可以将验证码图片上传到打码平台上进行识别。如果不成功,可以再次更新验证码识别,直到成功为止。

爬取有两个需要注意的问题:

如何监控一系列网站的更新情况,也就是说,如何进行增量式爬取?

对于海量数据,如何实现分布式爬取?

分析

抓取之后就是对抓取的内容进行分析,你需要什么内容,就从中提炼出相关的内容来。

常见的分析工具有正则表达式,BeautifulSoup,lxml等等。

存储

分析出我们需要的内容之后,接下来就是存储了。

我们可以选择存入文本文件,也可以选择存入MySQL或MongoDB数据库等。

存储有两个需要注意的问题:

如何进行网页去重?

内容以什么形式存储?

Scrapy

Scrapy是一个基于Twisted的开源的Python爬虫框架,在工业中应用非常广泛。

Robots协议

好的网络爬虫,首先需要遵守Robots协议。Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

在网站根目录下放一个robots.txt文本文件(如 https://www.taobao.com/robots.txt ),里面可以指定不同的网络爬虫能访问的页面和禁止访问的页面,指定的页面由正则表达式表示。网络爬虫在采集这个网站之前,首先获取到这个robots.txt文本文件,然后解析到其中的规则,然后根据规则来采集网站的数据。

1. Robots协议规则

User-agent: 指定对哪些爬虫生效

Disallow: 指定不允许访问的网址

Allow: 指定允许访问的网址

注意:一个英文要大写,冒号是英文状态下,冒号后面有一个空格,”/”代表整个网站

2. Robots协议举例

禁止所有机器人访问

User-agent: *

Disallow: /

允许所有机器人访问

User-agent: *

Disallow:

禁止特定机器人访问

User-agent: BadBot

Disallow: /

允许特定机器人访问

User-agent: GoodBot

Disallow:

禁止访问特定目录

User-agent: *

Disallow: /images/

仅允许访问特定目录

User-agent: *

Allow: /images/

Disallow: /

禁止访问特定文件

User-agent: *

Disallow: /*.html$

仅允许访问特定文件

User-agent: *

Allow: /*.html$

Disallow: /

作者:编程新视野

链接:https://www.jianshu.com/p/5912e83a7da8

python网络爬虫软件哪个好用_好好学Python,入门网络爬虫之精华版!相关推荐

  1. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  2. python实现爬虫收集图片 花瓣网_【动态网页】python3爬取花瓣网图片

    步骤:1 分析源码,找到网页地址以及下拉刷新后的地址,提取每张图片的信息,包括pin_id,key,type,通过key可以唯一确定一张图片的地址. 2  编写脚本,使用request库模拟请求 举个 ...

  3. python网络爬虫实战 吕文翔_实战Python网络爬虫

    本书从原理到实践,循序渐进地讲述了使用Python开发网络爬虫的核心技术.全书从逻辑上可分为基础篇.实战篇和爬虫框架篇三部分.基础篇主要介绍了编写网络爬虫所需的基础知识,包括网站分析.数据抓取.数据清 ...

  4. 网络爬虫软件有哪些?

    知道一个网络爬虫软件,瑞雪采集云,还是有一些特点的: 瑞雪采集云是一个PaaS在线开发平台,与图形配置化爬虫客户端工具相比,瑞雪采集云提供的是通用采集能力,能够满足企业客户数据采集业务的长期需求. 主 ...

  5. Screaming Frog SEO Spider Mac(尖叫青蛙网络爬虫软件)

    macbv推荐 com 前言 Screaming Frog SEO Spider在MAC电脑上是一款非常强大的网络软件,可以抓取网站的网址. 一.Screaming Frog SEO Spide是什么 ...

  6. python网络爬虫权威指南(第2版)pdf_用Python写网络爬虫(第2版) PDF 下载

    资料目录: 第 1章 网络爬虫简介 1 1.1 网络爬虫何时有用 1 1.2 网络爬虫是否合法 2 1.3 Python 3 3 1.4 背景调研 4 1.4.1 检查robots.txt 4 1.4 ...

  7. python网络爬虫技术 江吉彬下载 pdf_精通Python网络爬虫:核心技术、框架与项目实战 附源码 中文pdf完整版[108MB]...

    精通Python网络爬虫这是一本实战性的网络爬虫秘笈,不仅讲解了如何编写爬虫,而且还讲解了流行的网络爬虫的使用. 全书分为4个部分:第壹部分对网络爬虫做了概要性的介绍,主要介绍了网络爬虫的常识和所涉及 ...

  8. 一款非常强大的网络爬虫软件:Screaming Frog SEO Spider Mac(尖叫青蛙)

    seo spider是mac上一款非常强大的网络爬虫软件,可以抓取网站的网址,并且能够实时分析结果.它会收集关键的现场数据以便于SEO做出正确的决策.而且seo spider具有网页蜘蛛功能,您可以让 ...

  9. 网络爬虫软件(火车采集器)

    网络爬虫软件(火车采集器) 软件下载:火车采集器 下载好软件后注册一个账号 安装完成后登录账号 输入起始网址 如图: 保存后点击开始 如图:

最新文章

  1. linux查找maven安装目录_Linux 安装 maven
  2. Python matplotlib中文显示异常,导入simhei字体有误
  3. python字符串/列表/字典互相转换
  4. Cesium原理篇:7最长的一帧之Entity(上)
  5. Python字典:字典操作
  6. yarn oom问题一例
  7. laravel常用响应操作
  8. 代码不是艺术,是现实的表现
  9. 一文了解授信审批策略及流程
  10. python能做什么excel-python能做什么,python自学行吗?
  11. 89c51单片机流水灯操作
  12. 数据库索引到底是什么,是怎样工作的?
  13. 《时运赋》 送给坚持在路上的你
  14. html怎么做出相框的效果,使用CSS3制作PS级的图片边框效果
  15. 无法连接虚拟设备 floppy0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?
  16. android hook方法替换,Android Hook入门教程
  17. 2019暑假集训感触与收获
  18. Validform_v5.3.2 自定义规则
  19. Python:写了一个简易的同/环比分析器
  20. 本地web服务器配置(IIS)

热门文章

  1. php查找存储引擎,php-如何找到MySQL临时表存储引擎
  2. vimb java_vim 中更好的編輯 java 文件.
  3. Python如何创建装饰器时保留函数元信息
  4. python3高级 之 生成器
  5. Linux查看文件和日志的常用命令
  6. Zigbee网络架构+ZigBee的体系结构+理解zigbee节点的实现的案例+“51单片机” 和 “zigbee” 、 “cc2530芯片” 之间的关系+芯片cc2530
  7. SCI EI 期刊等讨论站点
  8. NLP《语言模型(三)-- 基于循环神经网络的RNNLM语言模型》
  9. 《Pytorch - 线性回归模型》
  10. 漫步最优化二十二——收敛速率