基本原理,一行代码就能表示,要先导入urllib模块
import urllib.request
html = urllib.request.urlopen('http://www.baidu.com').read()
print(html)
这就表示用urlopen来打开百度首页,读取内容并打印出来。但是这样我们看到的都是二进制代码,需要decode一下
import urllib.request
html = urllib.request.urlopen('http://www.baidu.com').read().decode('utf-8')
print(html)
这样打印出来的就正常了,和我们用chrome查看的源码一样了。
python的cookie主要是http.cookiejar模块
import http.cookiejar
cj = http.cookiejar.CookieJar()
cj = urllib.request.HTTPCookieProcessor(cj)
获取cookie后还可以保存cookie,使用http.cookiejar.FileCookieJar()
。
此时http.cookiejar.CookieJar()
需要用http.cookiejar.MozillaCookieJar()
(用这表示使用Mozilla的cookie方式存储和读取)和http.cookiejar.LWPCookieJar()
(这表示 Set-Cookie3 文件格式存储和读取)代替,具体看官方文档。
import http.cookiejar
cj = http.cookiejar.MozillaCookieJar()
cj = urllib.request.HTTPCookieProcessor(cj)
#保存cookie到cookie.txt 文件
cj.save('cookie.txt')
#从cookie.txt中读取cookie
cj.load('cookie.txt')
有时需要使用代理,使用
proxy = urllib.request.ProxyHandler({'http':'127.0.0.8:1080'})
里面是个字典,当然可以设置不止一个代理。
设置cookie和代理之后,不能立即生效,需要更改打开网页的方式,也就是
opennr = urllib.request.build_opener(cj,proxy)
urllib.request.install_opener(opener)
urllib.request.urlopen('http://www.baidu.com')
这样打开网页就能处理cookie和代理了。
很多网站禁止了类似python的爬虫,所以需要模拟浏览器浏览,有的网站更是需要登陆才能浏览。
模拟浏览器主要是增加一个headers,在chrome浏览器上按下f12,就可以看到如下的headers信息。(Network->Documents->Headers)
我们需要增加的就是这个信息,一般添加其中的User-Agent就行了,这就能表示是是浏览器在浏览,有的还需要添加Referer。
headers的增加可以直接
opener.addheaders=[('User-Agent','Mozilla/5.0 ...']
也可以采用下面的方法:
req = urllib.request.urlopen(url)
#添加Referer
req.add_header('Referer', 'http://www.python.org/')
添加User-Agent
req.add_header('User-Agent', 'Mozilla/5.0 ...')
对于需要登陆的还需要data,包括用户名、密码之类的。
查看所登录的网站需要哪些数据,一般的网页可以直接使用chrome的f12查看,对于会跳转的,需要借助其他的抓包工具,类似wireshark等。
有了上面的步骤,获得网页的源码,现在可以提取所需要的内容了。 这里可以使用python自带的字符串处理、正则表达式或者BeautyfulSoup4 。 主要教程: