有时候需要抓取登陆后的页面,让爬虫登陆网址。此程序可以实现模拟登陆爬虫,包括图片验证码的处理。
1、在cmd进入项目文件夹,创建爬虫项目和爬虫文件
>scrapy startproject douban
2、进入项目文件夹创建爬虫文件
>scrapy genspider -t crawl db qiushi.com(我创建的爬虫文件为db, qiushi.com为糗事百科网域名)
3、用pycharm打开这个项目
编辑db.py,其他文件可暂时不用处理
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
import urllib.request
class DbSpider(scrapy.Spider):
name = 'db'
allowed_domains = ['douban.com']
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0'}
def start_requests(self):
return [Request('https://www.douban.com/accounts/login',
callback=self.parse,
headers=self.header,
meta={'cookiejar':1})]
def parse(self, response):
print('hhhh')
captcha=response.xpath('//img[@id="captcha_image"]/@src').extract()
#url='https://accounts.douban.com/login'
if len(captcha)>0:
print('此时有验证码')
localpath='e:/captcha.png'
urllib.request.urlretrieve(captcha[0],filename=localpath)
print('请查看本地验证码图片')
captcha_value=input()
# form_email登陆豆瓣的账号,form_password登陆豆瓣的密码
data = {'form_email': '*********',
'form_password': '*******',
'captcha-solution':captcha_value,
'redir': 'https://www.douban.com/people/18760256/', }
else:
print('此时没有验证码')
data={'form_email':'*******',
'form_password':'*******',
'redir':'https://www.douban.com/people/187600256/',}
print('登陆中。。。')
return [FormRequest.from_response(response,
meta={'cookiejar':response.meta['cookiejar']},
headers=self.header,
formdata=data,
callback=self.next,)]
def next(self,response):
print('登陆完成,并爬取了个人中心的数据')
title=response.xpath('/html/head/title').extract()
note=response.xpath('//div[@class="note"]/text()').extract()
print(title[0])
print(note[0])