scrapy登录网站

作者: HCZd | 来源:发表于2019-07-24 15:29 被阅读82次

Scrapy爬取需要登录的网站有两种方法:
1、首先登录网站,复制登录后的cookie和header粘贴到代码中,模拟浏览器操作。此方法比较简洁,不过cookie有时间限制,过期后需要重新获取cookie,不适合长期项目。

2、使用FormRequest.from_response()方法,此方法足以满足80%的网站登录,使用formdata参数提交需要的Post数据,但是有一点需要特别注意:

此方法一定要确认URl有form表单!!!

此方法一定要确认URl有form表单!!!

此方法一定要确认URl有form表单!!!

如果请求URL没有form表单是无法提交参数的。

3、如果没有form表单,使用FormRequest实例,手动指定post地址,
使用scrapy.FormRequest()进行登陆,但此时不再使用from.request;
只是对设置的url发送post请求,对得到的cookies进行存储
详情参考:
https://blog.csdn.net/qq_42293758/article/details/87925623

简化版:

首先安装scrapy:https://www.jianshu.com/p/ddf57836d625
打开CMD,执行下面代码

scrapy startprojrct pachong1  #创建项目

cd pachong1   #进入项目

scrapy  genspider  ‘项目名’   ‘地址’    #如下图↓ 
生成爬虫文件.png

打开项目文件夹,打开spiders下生成的爬虫文件。

此处使用了自己搭建的wordpress举例:
直接复制这段源码,只需修改:url连接(爬取目标url和登录url)和form中的参数,
可以登录大部分网站,需要爬取的项目和数据在parse_item中修改就可以。如果需要保存在本地,parse_item中爬取的数据需要在items中定义。

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import Rule,Request

class DoubanSpider(scrapy.Spider):
    name = 'worpress'
    allowed_domains = ['192.168.5.111:8000']
    start_urls = 'http://192.168.5.111:8000/wp-admin/'  #需要爬取url连接
    #请求登录url,返回meta记录,保存cookie
    def start_requests(self):
        return [Request(url = self.start_urls, meta = {'cookie':1}, callback = self.post_login)]
    #传递登录参数
    def post_login(self, response):
        return scrapy.FormRequest(
            url = 'http://192.168.5.111:8000/wp-login.php',   #登录url连接
            method = 'POST',    # 指定访问方式
            #form表单中的参数传递
             formdata={'log': '登录用的账户',
                  'pwd': '登录用的密码',
                  'wp-submit': 'Log In',
                  'redirect_to': 'http://192.168.5.111:8000/wp-admin/',
                  'testcookie': '1'},
            meta = {'cookie':response.meta['cookie']}, 
            dont_filter = True,    # 不进行去重处理
            callback = self.after_login
            )
    #返回登录后meta
    def after_login(self, response):
        url = self.start_urls
        yield Request(url = url, meta = {'cooki':1}, callback = self.parse_item, dont_filter = True)

    #打印欢迎登陆,查看是否爬取成功
    #注意:需要爬取的项目需要在items中定义,此处不保存,只是验证登录成功
    def parse_item(self, response):
        #爬取wordpress欢迎标语:Welcome to wordpress
        author = response.xpath('//*[@id="welcome-panel"]/div/h2/text()').extract_first()
        print(author)
        with open('worpress.txt','wb') as f:
            f.write(response.body) #保存源码,验证和登录后源码是否相同
        return
登录成功.png

相关文章

  • scrapy登录网站

    Scrapy爬取需要登录的网站有两种方法:1、首先登录网站,复制登录后的cookie和header粘贴到代码中,模...

  • Scrapy架构及流程

    Scrapy是一个为了爬取网站数据、提取结构化数据而编写的爬虫应用框架。Scrapy内部实现了包括并发请求、免登录...

  • 各类链接

    爬虫 使用python-aiohttp爬取今日头条 【Python】爬虫爬取各大网站新闻 Scrapy 模拟登录新...

  • scrapy发送post请求进行登录

    --- title: scrapy发送post请求进行登录 tags: python,scrapy,爬虫 --- ...

  • scrapy爬虫实战从入门到进阶

    前言 1.什么是scrapy?为什么要用scrapy?scrapy的官方解释如下:Scrapy是一个为了爬取网站数...

  • scrapy 模拟登录weibo.com

    之前学习了模拟登录新浪微博,没有用到框架,今天晚上尝试用scrapy重新写一遍模拟登录。存在问题:1、scrapy...

  • [CP_14] Python爬虫框架01:Scrapy框架创建项

    目录结构 一、Scrapy框架简介 1. Scrapy引入 Scrapy:是用Python实现爬取网站数据、提取结...

  • 爬虫-scrapy快速入门

    1. scrapy 概述 官方网站:https://scrapy.org/,打开官方网站,可以看到一段关于scra...

  • scrapy入门

    1.scrapy概述 官方网站:http://scrapy.org [orginzation]使用Python开发...

  • scrapy框架——爬虫

    下载安装 官方网站: https://scrapy.org官方文档: https://docs.scrapy.or...

网友评论

    本文标题:scrapy登录网站

    本文链接:https://www.haomeiwen.com/subject/krexrctx.html