Python

Python入门---爬虫

2018-02-05  本文已影响0人  达克与皮哥

私以为学习Python最好从爬虫开始,python对爬虫是如此的友好,支持库琳琅满目,而且爬取数据对于以后的学习又能助一把力,不可谓是一举多得。

一、urllib

urllib库就能完美实现一个爬虫,从最简单的urllib.request.urlopen(url='url',timeout=2000)就能打开大部分网站。

from urllib import request

url="https://www.baidu.com" 

response=urllib.request.urlopen(url,timeout=2000)

result=response.read()

在深入一点的,加入了登录功能的,就需要分析提交的表单数据,使用Chrome的开发者工具就能够抓取到对应的提交的数据表单。

比如下面的内容就是简书登录时产生的数据表单:

utf8:

authenticity_token:

EYhTNTf7Wj8tlEv4sDUHbZlHx8y6/1z2i1OjuABaqUFFYxKB+Y6mdYl5jLDx/LxFvWJTi9nAjnsKpnW2JXmXEA==

session[email_or_mobile_number]:

username

session[password]:

password

session[oversea]:

false

captcha[validation][challenge]:

b62a5209c2b8f67190852ad81b2401ea

captcha[validation][gt]:

ec47641997d5292180681a247db3c92e

captcha[validation][validate]:

6452b851cf3f05f9d232dc8aa4b3f6d6

captcha[validation][seccode]:

6452b851cf3f05f9d232dc8aa4b3f6d6|jordan

captcha[id]:

geetest_challenge:

b62a5209c2b8f67190852ad81b2401ea

geetest_validate:

6452b851cf3f05f9d232dc8aa4b3f6d6

geetest_seccode:

6452b851cf3f05f9d232dc8aa4b3f6d6|jordan

session[remember_me]:

true

commit:

登录

当然,仅仅学会抓取表单并不代表就能成功实现登录,因为有些网站或多或少会使用一些动态的验证手段,遇到这种情况,可以先抓取登录页面中的表单内容,然后填入要提交的表单中,基本上就能实现成功登录了。

登录后可以使用 Cookielib来保存cookies,在PY3中为http.cookiejar。

import http.cookiejar

cj = http.cookiejar.CookieJar()

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

param={"authenticity_token":"EYhTNTf7Wj8tlEv4sDUHbZlHx8y6/1z2i1OjuABaqUFFYxKB+Y6mdYl5jLDx/LxFvWJTi9nAjnsKpnW2JXmXEA==",

"session[email_or_mobile_number]":"username",

"session[password]":"password",

"session[oversea]":"false"

}

data=urllib.parse.urlencode(param)

header = {

"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Encoding":"utf-8",

"Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3",

"Connection":"keep-alive",

"Host":"c.highpin.cn",

"Referer":"http://c.highpin.cn/",

"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"

}

request=urllib.request.Request(url,data,header)

response= opener.open(request)

res=response.read()

另外还有一些库提供了一些别的支持,像ntlm提供认证支持,bs4提供解析支持,还有urllib里面的proxyhandler等等有的时候也有很大的作用

上一篇下一篇

猜你喜欢

热点阅读