私以为学习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等等有的时候也有很大的作用