作为一个啥也不懂的小白。为了毕业开始好好写程序和心得。
最近开始忙毕业项目,数据需要使用爬虫获取。于是打算把整个过程用csdn的博客记录下来
首先爬取网页,尤其是社交网站最需要的就是在爬取之前进行登录。
这个爬虫的目的是模拟登录豆瓣网,并验证性的做一个跳转。
主要难点还是在于验证码的处理上。
由于第一次请求的网页附带的验证码和第二次的不同所以会出现一个问题验证码不统一。
于是我们需要使用cookie将登录数据整合起来发送给需要接受的url
这是登录的网页的 url
这是网页以及post的信息
其中 post代表的是将这个页面的登录信息发送给 www.douban.com
所以具体的流程就是在第一个url中请求后判断有无验证码,再将登录信息发给需要访问的主页。
代码如下
"""
Created on Wed Sep 13 14:40:35 2017
@author: vcc
"""
import requests
import urllib
import cookielib
import urllib2
import re
import time
'''
cjar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar))
urllib2.install_opener(opener)
'''
#############装载到了urllib包下
url = "https://accounts.douban.com/login"
#mysession = requests.Session()
#r = mysession.get(url,timeout=60*4)
url3 = "https://douban.com/"
pat_cap = "https://www.douban.com/misc/.*?=s"
headers2 = ('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")
temp = opener.open(url).read()
time.sleep(3)
captcha = re.compile(pat_cap).findall(str(temp))
#captcha = urllib2.urlopen(url).xpath('//img[@id="captcha_image"]/@src').extract()
if len(captcha)>0:
print "it have yanzhengma-------------------"
urllib.urlretrieve(captcha[0],"E://pythontest/captcha.png")
captcha_value = raw_input()
postdata = urllib.urlencode({
"form_email":"872823789@qq.com",
"form_password":"yangqi1994",
"captcha-solution":captcha_value
}).encode('utf-8')
else:
print "nothave yanzhengma =--------------------------------------"
postdata = urllib.urlencode({
"form_email":"872823789@qq.com",
"form_password":"yangqi1994"
}).encode('utf-8')
time.sleep(4)
req = urllib2.Request(url3,postdata)
req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")
cjar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar))
urllib2.install_opener(opener)
##################urllib 的保存cookie 与程序出现的位置有关系 cookie保存的是第一次打开网页的时候的登录信息
try:
response = opener.open(req)
result = response.read()
print result
except urllib2.HTTPError,e:
print e
print '------------------------------------------------------------------------------------------------------------'
time.sleep(2)
url2 = "https://www.douban.com/people/166640189/"
'''
req = urllib2.Request(url2)
req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")
'''
data = opener.open(req).read()
print data
需要注意的是cookie添加的位置将影响到cookie信息的保存。