较为常见的Python网络爬虫方法小结

2021-03-29 07:21 jianzhan

用python也类似一年多了,python运用数最多的情景還是web迅速开发设计、网络爬虫、全自动化运维管理:写过简易网站、写过全自动发帖子脚本制作、写过收取和发送电子邮件脚本制作、写过简易认证码鉴别脚本制作。网络爬虫在开发设计全过程中也是有许多重复使用的全过程,这儿小结一下,之后也可以省些事儿。全文根据Python2,自己梳理全过程中改动为Python3。

1、基本爬取网页页面

get方式

from urllib import request
url =  pre>

post方式

from urllib import request
from urllib import parse
url =  s 
form = { wd :  abc }
form_data = parse.urlencode(form)
form_data = form_data.encode( utf-8 )
res = request.urlopen(url, form_data)
print(res.read())

2、应用代理商IP

在开发设计网络爬虫全过程中常常会碰到IP被封掉的状况,这时候就必须采用代理商IP;在urllib包中有ProxyHandler类,根据该类能够设定代理商浏览网页页面,以下编码片断:

from urllib import request
url =  s 
proxy = request.ProxyHandler({ http :  27.204.194.125:9999 })
opener = request.build_opener(proxy)
request.install_opener(opener)
res = request.urlopen(url)
print(res.read().decode( utf-8 ))

3、Cookies解决

cookies是一些网站以便鉴别客户真实身份、开展session追踪而存储再用户当地终端设备上的数据信息(一般历经数据加密),python出示了cookielib控制模块用以解决cookies,資源.

编码片断:

from urllib import request
from http import cookiejar
url =  s 
cookie_support = request.HTTPCookieProcessor(cookiejar.CookieJar())
opener = request.build_opener(cookie_support)
request.install_opener(opener)
content = request.urlopen(url).read()
print(content.decode( utf-8 ))

重要取决于CookieJar(),它用以管理方法HTTP cookie值、储存HTTP恳求转化成的cookie、向传来的HTTP恳求加上cookie的目标。全部cookie都储存以内存中,对CookieJar案例开展废弃物收购后cookie也将遗失,全部全过程也不必须独立去实际操作。

4、掩藏成访问器

一些网站抵触网络爬虫的来访,因此对网络爬虫一概回绝恳求。因此用urllib2立即浏览网站常常会出現HTTP Error 403: Forbidden的状况。对一些 header 要非常注意,Server 端会对于这种 header 做查验:

1.User-Agent 一些 Server 或 Proxy 会查验该值,用于分辨是不是是访问器进行的 Request

2.Content-Type 在应用 REST 插口时,Server 会查验该值,用于明确 HTTP Body 中的內容该如何分析。

这时候能够根据改动http包中的header来完成,编码片断以下:

from urllib import request
url =   
headers = {
  User-Agent :  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/ Firefox/3.5.6 
requests = request.Request(
 url=url,
 headers=headers
content = request.urlopen(requests).read()

针对这2个库,我的点评是,全是HTML/XML的解决库,Beautifulsoup纯python完成,高效率低,可是作用好用,例如可用根据結果检索得到某一HTML连接点的源代码;lxmlC語言编号,高效率,适用Xpath

6、认证码的解决

针对一些简易的认证码,能够开展简易的鉴别。自己也只开展过一些简易的认证码鉴别。可是一些反人们的认证码,例如12306,能够根据打码服务平台开展人力打码,自然它是要付钱的。

7、gzip缩小

有木有碰到过一些网页页面,无论如何转换格式全是一团错码。嘿嘿,那表明你要不知道道很多web服务具备推送缩小数据信息的工作能力,这能够将互联网路线提交输的很多数据信息消减 60% 之上。这特别是在可用于 XML web 服务,由于 XML 数据信息 的缩小率能够很高。

可是一般网络服务器不容易给你推送缩小数据信息,除非是你告知网络服务器你可以以解决缩小数据信息。因此必须那样改动编码:

from urllib import request
url =   
requests = request.Request(url)
requests.add_header( Accept-encoding ,  gzip )
opener = request.build_opener()
f = opener.open(request)

它是重要:建立Request目标,加上一个 Accept-encoding 头信息内容告知网络服务器你可以接纳 gzip 缩小数据信息。随后便是缓解压力缩数据信息:

from io import StringIO
import gzip
compressed_data = f.read()
compressed_stream =&pressed_data)
gzipper = gzip.pressed_stream)
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

儿童 少年儿童:09回应