Scrapy登录爬取豆瓣个人中心页
Python3
最后更新 2020-04-30 19:10 阅读 3958
最后更新 2020-04-30 19:10
阅读 3958
Python3
Scrapy登录爬取豆瓣个人中心页
# -*- coding: utf-8 -*- import urllib import scrapy from os import path from scrapy import Request, FormRequest import os #登录爬取豆瓣 d = path.dirname(__file__) if "__file__" in locals() else os.getcwd() class LoginspdSpider(scrapy.Spider): name = 'loginspd' allowed_domains = ['douban.com'] #设置头信息,模拟浏览器爬取 header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safiri/537.36 SE 2.X MetaSr 1.0"} #编写start_requests() 方法,第一次会默认调取该方法中的请求 def start_requests(self): # 首先爬一次登录页,然后进入回调函数parse() return [Request("https://accounts.douban.com/login", meta={"cookiejar": 1}, callback=self.parse)] def parse(self, response): # 获取验证码图片所在地址,获取后赋给captcha 变量,此时captcha 为一个列表 captcha = response.xpath('//img[@id="captcha_image"]/@src').extract() #因为登录时有时网页有验证码, 有时没有验证码 #所以需要判断此时是否需要输入验证码,若captcha 中有元素,说明有验证码信息 if len(captcha)>0: print("此时有验证码") #设置将验证码图片存储到本地地址 localpath=path.join(d,'captcha.png') #将服务器中的验证码图片存到本地,供我们在本地直接进行查看 urllib.request.urlretrieve(captcha[0], filename=localpath) print("请查看本地图片captcha.png,并输入对应验证码:") captcha_value = input() #设置要传递的post信息 data={ #设置登录帐号,格式为帐号字段名:具体帐号 "form_email":"xxxxxxxxxx", "form_password":" ", "captcha_solution":captcha_value, #设置需要转向的网址,由于我们要爬取个人中心页,所以转向个人中心页 "redir": "" } #否则说明captcha 列表中没有元素,即此时不需要输入验证码信息 else: print("此时没有验证码") # 设置要传递的post信息,此时没有验证码字段 data={ "form_email": "xxxxxxxxxx", "form_password": " ", # 设置需要转向的网址,由于我们要爬取个人中心页,所以转向个人中心页 "redir": " " } print("登录中...") #通过 return [FormRequest.from_response(response, meta={"cookiejar": response.meta["cookiejar"]}, headers=self.header, formdata=data, callback=self.next)] def next(self,response): print("此时已经登录完成并爬取了个人中心中该用户的相关信息") xtitle = "/html/head/title/text()" xnotetitle = "//div[@class = 'note-header p12']/a/@title" xnotetime = "//div[@class = 'note-header p12']//span[@class='p1']/text()" xnotecontent = "//div[@class = 'mbtr2']/div[@class = 'note']/text()" xnoteurl = "//div[@class = 'note-header p12']/a/@href" title = response.xpath(xtitle).extract() notetitle = response.xpath(xnotetitle).extract() notetime = response.xpath(xnotetime).extract() notecontent = response.xpath(xnotecontent).extract() noteurl = response.xpath(xnoteurl).extract() print('网页的标题是:'+title[0]) for i in range(len(notetitle)): print("第"+str(i+1)+"篇文章的信息如下:") print("文章标题为:"+notetitle[i]) print("文章发表时间为:"+notetime[i]) print("文章内容为:"+notecontent[i]) print("文章链接为:"+noteurl[i]) print("--------------------------")
欢迎关注我的个人公众号“玩吧Coder”,感谢每一位关注支持我的朋友!
赞
讨论
500字
表情
删除确认
是否删除该条评论?
取消
删除