一、Python中urllib+urllib2+cookielib模块编写爬虫实战攻略
最常用的Python爬虫模块之一就是urllib库和urllib2库,它们可以用于进行HTTP(S)请求,获取网页源代码等操作。同时我们还可以使用Python中的cookielib模块来管理Cookies,模拟登录,配合urllib+urllib2使用可以实现爬虫的功能。
具体攻略步骤如下:
1.导入需要的模块
import urllib
import urllib2
import cookielib
2.创建一个CookieJar对象
cookie = cookielib.CookieJar()
3.创建一个代表网站的URL opener对象
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
4.为URL opener对象添加User-Agent信息,以免被服务器拒绝访问。这些信息可以通过在浏览器中按F12开发者模式查看请求头获得
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0')]
5.模拟登录需要POST数据,这里需要将POST数据编码为URL格式,以便在HTTP请求中使用
postdata = urllib.urlencode({'username': 'test', 'password': '123456'})
6.创建一个Request对象
req = urllib2.Request(url, postdata)
7.通过URL opener发起POST请求
response = opener.open(req)
8.获取登录成功后的网站信息
html = response.read().decode('utf-8')
上面的步骤可以实现模拟登录功能。接下来可以通过opener来访问需要登录才能访问的页面。
9.访问需要登录权限的网站
response = opener.open('http://www.example.com')
html = response.read().decode('utf-8')
10.处理抓取到的数据。
示例1:模拟登录CSND网站并访问个人中心页面
import urllib
import urllib2
import cookielib
# 创建一个CookieJar对象
cookie = cookielib.CookieJar()
# 创建一个代表网站的opener对象
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
# 为URL opener添加User-Agent信息,以免被服务器拒绝访问。
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0')]
# 模拟登录需要POST的数据
postdata = urllib.urlencode({'username': 'your_username', 'password': 'your_password'})
# 创建一个Request对象
req = urllib2.Request(url='http://passport.csdn.net/account/login', data=postdata)
# 通过URL opener发起POST请求
response = opener.open(req)
# 访问已经登录,需要登录权限的个人中心
response = opener.open('http://my.csdn.net/my/mycsdn')
# 获取登录成功后的网站信息
html = response.read().decode('utf-8')
print(html)
示例2:模拟登录京东商城并获取商品列表
import urllib
import urllib2
import cookielib
# 创建一个CookieJar对象
cookie = cookielib.CookieJar()
# 创建一个代表网站的opener对象
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
# 为URL opener添加User-Agent信息,以免被服务器拒绝访问。
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0')]
# 模拟登录需要POST的数据
postdata = urllib.urlencode({
'pwd': 'your_password',
'account': 'your_account'
})
# 创建一个Request对象
req = urllib2.Request(url='https://passport.jd.com/uc/loginService', data=postdata)
# 通过URL opener发起POST请求
response = opener.open(req)
# 访问已经登录需要登录权限的页面
response = opener.open('https://order.jd.com/center/list.action')
# 获取网页内容并处理数据
html = response.read().decode('gbk')
print(html)
以上两个示例可以从中了解到爬虫中一个常见的流程,即模拟登录获取数据的功能实现方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中urllib+urllib2+cookielib模块编写爬虫实战 - Python技术站