自动模拟登陆爬虫

有时候需要抓取登陆后的页面,让爬虫登陆网址。此程序可以实现模拟登陆爬虫,包括图片验证码的处理。

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])

猜你喜欢

转载自blog.csdn.net/xx20cw/article/details/84314037