广西互联网金融平台系列-Scrapy爬虫登录爬取东盟贷(需登录POST)

1、背景

在爬取的过程当中发现,有一些平台是须要登陆后才能访问标的详细信息或者标的列表,广西这个叫东盟贷的网贷平台就是如此。对于这种网站,一般有两种应对方式:php

1.Scrapy结合selenium进行爬取,这样就不会存在cookie和登陆的这些问题了,保持chrome不关闭就行。css

2.Scrapy模拟登陆chrome

2、目的

此次经过Scrapy模拟登陆来对东盟贷进行数据的抓取,只写逻辑就行,具体操做就不写了。浏览器

3、条件

1.须要登陆cookie

2.无需验证码dom

3.登录后会自动跳转到用户中心scrapy

4、工具

import scrapy

from scrapy.http import FormRequest,Request

from urllib import parse

5、示例

事件逻辑:ide

1.模拟浏览器向网站发起登陆请求工具

2.根据登录后跳转的url判断是否登陆成功post

3.若是登陆成功,则对列表页的url进行抽取

4.将抽取到的具体标的url传递给parse_detail进行详细数据的爬取

5.数据序列化

6.入库

import scrapy
from scrapy.http import FormRequest,Request
from urllib import parse


class DongmengSpider(scrapy.Spider):
    name = 'dongmeng'
    allowed_domains = ['www.dongmengdai.com']
    # 设置基本的agent和referer
    header = {
        "HOST": "www.dongmengdai.com",
        "Referer": "https://www.dongmengdai.com/view/regphone.php",
        'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
    }

    def start_requests(self):
        """
        经过FormRequest进行数据的post操做
            提交请求时带上header,用户名,密码
            提交请求后调用is_login判断是否登陆成功
        :return:
        """
        return [
            FormRequest(
                "https://www.dongmengdai.com/index.php?user&q=action/login",
                headers=self.header,
                formdata={"keywords": "13509090909", "password": "123456789"},
                callback=self.is_login
            )]

    def parse(self, response):
        """
        接收传递过来的response(标的列表页)
            在当前页取到具体的标的url,传递到parsdetail进行具体的数据爬取
        """
        total = response.css('.table-responsive.list-bid .table.margin-no tbody:last-child tr')
        for i in total:
            target_urls = i.css('td:first-child a::attr(href)').extract_first("")
            yield Request(url=parse.urljoin("https://www.dongmengdai.com",target_urls),callback=self.parse_detail)

    def parse_detail(self, response):
        """ 爬取标的信息操做在这里编写 """

        pass

    def is_login(self, response):
        """
        根据返回的url判断是否登录成功 
            若是成功则将列表url传递给parse方法进行列表页的数据爬取
        """
        if "user" in response.url:
            print("登录成功")
            yield Request(url="https://www.dongmengdai.com/view/Investment_list_che.php",callback=self.parse)
相关文章
相关标签/搜索