包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里] 】!
在当今的编程世界中,若想要快速学习爬虫,最值得投入精力去学习的语言非 Python 莫属。Python 拥有极为广泛的应用场景,涵盖了 Web 快速开发、爬虫、自动化运维等多个领域。
在爬虫开发的过程中,我们常常会发现有许多可以复用的环节。为了让爬虫开发更加高效,今天就来总结一下必备的 8 大技巧,以便在今后的工作中能够省时省力,高效地完成任务。
(一)基本抓取网页
Python 中基本的网页抓取主要有 get 方法和 post 方法。get 方法用于获取网页内容,代码示例如下:
import urllib2
url = "http://www.baidu.com"
response = urllib2. urlopen( url)
print response. read( )
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%免费 】