Python爬虫常用的爬虫技巧

  • 1、基本抓取网页
  • 2、使用代理IP
  • 3、Cookies处理
  • 4、伪装成浏览器
  • 5、页面解析
  • 6、验证码的处理
  • 7、gzip压缩
  • 8、多线程并发抓取

urllib库为例进行介绍
中所有代码需要注意的库文件名:urllib 、cookielib 、httplib 、StringIO 、gzip 、Thread 、Queue

1、基本抓取网页

get方法

import urllib2url = "http://www.baidu.com"
respons = urllib2.urlopen(url)
print(response.read())

post方法

import urllib
import urllib2url = "http://abcde.com"
form = {'name': 'abc', 'password': '1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url, form_data)
response = urllib2.urlopen(request)
print(response.read())

2、使用代理IP

在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP;
urllib2包中有ProxyHandler类,通过此类可以设置代理访问网页,如下代码片段:

import urllib2proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
print(response.read())

3、Cookies处理

cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了cookielib模块用于处理cookies,cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.

代码片段:

import urllib2
import cookielibcookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()

关键在于CookieJar(),它用于管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失,所有过程都不需要单独去操作。

手动添加 cookie

cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

4、伪装成浏览器

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况

  • 对有些 header 要特别留意,Server 端会针对这些 header 做检查

  • User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request

  • Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

这时可以通过修改 header 来实现,代码片段如下:

import urllib2headers = {'User-Agent': 'Mozilla/5.0'
}
request = urllib2.Request(url='http://my.oschina.net/jhao104/blog?catalog=3463517',headers=headers
)
print(urllib2.urlopen(request).read())

5、页面解析

  • 对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样
  • 解析库了,常用的有两个 lxml 和 BeautifulSoup
  • 对于这两个库,都是HTML/XML的处理库,Beautifulsoup 纯 python 实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxml 是C语言编码,高效,支持Xpath
  • 个人比较喜欢使用 xpath 进行页面解析

6、验证码的处理

  • 对于一些简单的验证码,可以进行简单的识别。但是有些反人类的验证码,比如12306,可以通过打码平台进行人工打码,当然这是要付费的。

7、gzip压缩

有没有遇到过某些网页,不论怎么转码都是一团乱码。哈哈,那说明你还不知道许多web服务具有发送压缩数据的能力,这可以将网络线路上传输的大量数据消减 60% 以上。这尤其适用于 XML web 服务,因为 XML 数据 的压缩率可以很高

但是一般服务器不会为你发送压缩数据,除非你告诉服务器你可以处理压缩数据

于是需要这样修改代码:

import urllib2
import httplibrequest = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
f = opener.open(request)

这是关键:创建Request对象,添加一个 Accept-encoding 头信息告诉服务器你能接受 gzip 压缩数据

然后就是解压缩数据:

import StringIO
import gzipcompresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print(gzipper.read())

8、多线程并发抓取

  • 单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的
  • 虽然说python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的
from threading import Thread
from Queue import Queue
from time import sleep# q是任务队列
# NUM是并发线程总数
# JOBS是有多少任务
q = Queue()
NUM = 2
JOBS = 10# 具体的处理函数,负责处理单个任务
def do_somthing_using(arguments):print(arguments)# 这个是工作进程,负责不断从队列取数据并处理
def working():while True:arguments = q.get()do_somthing_using(arguments)sleep(1)q.task_done()# fork NUM个线程等待队列
for i in range(NUM):t = Thread(target=working)t.setDaemon(True)t.start()
# 把JOBS排入队列
for i in range(JOBS):q.put(i)
# 等待所有JOBS完成
q.join()

ps:高强度的爬虫会对服务器造成很大的压力,使用时配置好请求速度,合理使用避免造成不良影响

Python爬虫常用的爬虫注意事项及技巧相关推荐

  1. 简谈-Python一些常用的爬虫技巧

    第一种:基本的网页抓取 get方法 import urllib2url = "链接response = urllib2.urlopen(url)print response.read() p ...

  2. Python学习三: 爬虫高级技巧 与 模拟实战练习

    三大爬虫技巧 许多网站针对爬虫的访问都设置了一定的障碍,通过这三步技巧,轻松绕过部分的反爬虫限制. (1)设置程序休止时间 import time import random# 休止睡眠 1 秒 这里 ...

  3. 大佬带你详解Python反爬虫措施以及爬虫编写注意事项

    Python爬虫开发:反爬虫措施以及爬虫编写注意事项 反爬虫的几重措施 1.IP限制 如果是个人编写的爬虫,IP可能是固定的,那么发现某个IP请求过于频繁并且短时间内访问大量的页面,有爬虫的嫌疑,作为 ...

  4. python的爬虫库_python做爬虫常用库

    python做爬虫常用库 一.总结 一句话总结: urllib:一系列用于操作URL的功能. requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后 ...

  5. 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...

  6. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用

    网络爬虫开发常用框架 Scrapy 爬虫框架 Crawley 爬虫框架 PySpider 爬虫框架 Scrapy 爬虫框架的使用 搭建 Scrapy 爬虫框架 1. 安装 Twisted 模块 2. ...

  7. 【Python笔记】网络爬虫——常用技术

    网络爬虫常用技术 Python 的网络请求 1.urllib 模块 2.urllib3 模块 3.requests 模块 请求 headers 处理 网络超时 代理服务 HTML解析之 Beautif ...

  8. Python常用网络爬虫速查表下载

    Python常用网络爬虫速查表下载 Post方法: Get方法: css选择器 beautiful soup选择器 xpath选择器 可以将图片打印出来,放在桌面看 下载地址: 一天掌握python网 ...

  9. python爬虫 常用网站_给新手推荐几个实用又适合上手的Python爬虫项目

    Python的前景光明不需要过多赘述了,那么作为新人如何快速上手这门语言呢?废话不多说,今天给大家分享三个极实用的Python爬虫案例. 1.爬取网站美图 爬取图片是最常见的爬虫入门项目,不复杂却能很 ...

最新文章

  1. vue 路由相关操作
  2. 51..分治算法练习:  4378 【Laoguo】循环比赛
  3. 《那些年啊,那些事——一个程序员的奋斗史》——126
  4. 批量提取视频文件信息(文件大小及时长)并统计
  5. php课程 4-15 数组遍历、超全局数组、表单提交数据(多看学习视频)
  6. 更换微软TTS语音引擎切换
  7. 计算机毕业论文性能测试怎么写,计算机毕业论文撰写技巧
  8. 学习廖雪峰的Git教程
  9. 企业联合体的形式_企业组织形式的概念与类型怎么分?
  10. python 单词拆音节_基于Trie树进行拆分字符串变成拼音音节(一):构建拼音音节模型...
  11. window7电脑屏幕亮度调节的方法
  12. matlab用牛顿差值计算三次差值多项式,计算方法用Newton插值多项式求函数的近似值.docx...
  13. 云豹php短视频源码实现身份证验证的方法
  14. 迁移学习---举一反三
  15. 我在赶集网的两个月(完整版)
  16. 2021年全球与中国重型泥浆泵行业市场规模及发展前景分析
  17. Linux操作系统下/etc/hosts文件配置方法(域名映射)
  18. 字符串转日期,日期转字符串,日期比较
  19. WPS通配符(正则表达式)
  20. 图解分布式核心思路 | 最终一致性,一致只会迟到,但绝不会缺席

热门文章

  1. Android变调代码,Android 之 Fmod 变音的实现
  2. 微信web开发者工具不能打开的问题
  3. MPLS VPN跨域方案OptionA、B、C1、C2路由传递和数据转发三种方案的总结 配置思路
  4. AD进行PCB拼板设计
  5. Overload 和Override 的区别。
  6. Altium一键自动出BOM
  7. Splunk—云计算大数据时代的超级日志分析和监控利器
  8. 网络分析器Wireshark过滤器设置
  9. ETL kettle
  10. HTML 中noscript的用法