Python爬虫必备8大技巧


包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!

在这里插入图片描述

在当今的编程世界中,若想要快速学习爬虫,最值得投入精力去学习的语言非 Python 莫属。Python 拥有极为广泛的应用场景,涵盖了 Web 快速开发、爬虫、自动化运维等多个领域。
在爬虫开发的过程中,我们常常会发现有许多可以复用的环节。为了让爬虫开发更加高效,今天就来总结一下必备的 8 大技巧,以便在今后的工作中能够省时省力,高效地完成任务。

(一)基本抓取网页

  • Python 中基本的网页抓取主要有 get 方法和 post 方法。get 方法用于获取网页内容,代码示例如下:
import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()
  • post 方法通常用于表单提交,比如:
import urllib
import urllib2
url = "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()

(二)使用代理 IP

  • 在爬虫开发中,当遇到 IP 被封等情况时,可以使用代理 IP 来继续访问网页。例如:
import urllib2
proxy = 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()

(三)Cookies 处理

  • Cookies 在网站中用于辨别用户身份、进行 session 跟踪。
  • Python 中处理 cookies 的方法可以使用 cookielib 模块。
  • 关键在于 CookieJar (),它用于管理 HTTP cookie 值、存储 HTTP 请求生成的 cookie、向传出的 HTTP 请求添加 cookie 的对象。手动添加 cookie 的示例如下:
cookie = 
"PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

(四)伪装成浏览器

  • 某些网站会拒绝爬虫访问,这时可以通过修改 http 包中的 header 来伪装成浏览器进行访问。
  • 比如,有些 Server 或 Proxy 会检查 User-Agent,用来判断是否是浏览器发起的 Request。代码示例:
import urllib2
headers = 
{'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
request =
urllib2.Request(url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',headers = headers)
print urllib2.urlopen(request).read()

(五)页面解析

  • 页面解析在爬虫中非常重要。正则表达式是一种强大的页面解析工具,但不同网站和使用者的正则表达式各不相同。
  • 此外,还有 lxml 和 BeautifulSoup 两个解析库。
  • Beautifulsoup 纯 python 实现,效率低但功能实用,比如能用通过结果搜索获得某个 HTML 节点的源码;lxml 是 C 语言编码,高效,支持 Xpath。

(六)验证码的处理

  • 对于验证码,简单的验证码可以进行识别,一般思路是旋转的转回来,噪音去掉,然后划分单个字符,通过特征提取的方法降维并生成特征库,再把验证码和特征库进行比较。
  • 对于像 google 那种复杂的验证码,目前较难处理,可能需要通过打码平台进行人工打码,但这是要付费的。

(七)gzip 压缩

  • 网页压缩可以减小传输数据的大小,提高加载速度。
  • 许多 web 服务具有发送压缩数据的能力,比如 XML web 服务,XML 数据的压缩率可以很高。在 Python 中处理 gzip 压缩数据的代码如下:
import urllib2, httplib 
request = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
f = opener.open(request)
import StringIO
import gzip
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print gzipper.read()

(八)多线程并发抓取

  • 单线程抓取速度较慢,多线程并发抓取可以提高效率。虽然 Python 的多线程有一定局限性,但对于爬虫这种网络频繁型任务,还是能一定程度提高效率。
  • 以下是一个简单的线程池模板代码:
from threading import Thread
from Queue import Queue
from time import sleep
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()
for i in range(NUM):
t = Thread(target=working)
t.setDaemon(True)
t.start()
for i in range(JOBS):
q.put(i)
q.join()

图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值