2021/6/10爬虫第二十二次课(crawlspider、scrapy实现登录)

本文介绍Scrapy框架下的crawlspider组件使用方法及其优势,并详细讲解Scrapy如何实现登录功能,包括利用cookie和POST请求两种方式。

一、crawlspider

引入:
回顾之前的代码中,我们有很大一部分时间在寻找下一页的url地址或者是详情页的url地址上面,这个过程能更简单一些么?

定义:
是scrpay另一种爬取数据的方式

学习目标:
了解crawlspider的使用
crawlspiser是继承与spider这个爬虫类

它的特点:
根据规则提取链接发送给引擎

如何创建crawlspider
scrapy genspider -t crawl xx xx.com
有些场景使用crawlspider还是比较方便 前提是什么 (url的规律是比较人容易用正则来实现的) [] 
正则表达式一定要写对

案例:
需求:1)进入首页 2)进入详情页获取诗歌名称
代码:(D:\python_spider\day22\ancient_poems\ancient_poems\spiders\poems.py)

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class PoemsSpider(CrawlSpider):
    name = 'poems'
    allowed_domains = ['gushiwen.cn','gushiwen.org']
    start_urls = ['https://www.gushiwen.cn/default_1.aspx']

    rules = (
        Rule(LinkExtractor(allow=r'https://www.gushiwen.cn/default_[1,2].aspx'), follow=True),
        Rule(LinkExtractor(allow=r'https://so.gushiwen.cn/shiwenv_\w+.aspx'), callback='parse_item', follow=True)
    )

    def parse_item(self, response):
        item = {
   
   }
        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
        #item['name'] = response.xpath('//div[@id="name"]').get()
        #item['description'] = response.xpath('//div[@id="description"]').get()
        gsw_divs = response.xpath('//div[@class="left"]/div[@class="sons"]')

        for gsw_div in gsw_divs:
            title = gsw_div.xpath('.//h1/text()').get()
            print(title)


        return item

scrapy–Rule()与LinkExtractor()函数理解
Python爬虫之crawlspider类的使用
LinkExtractor的基本使用方法

二、scrapy实现登录

1 携带cookie向目标url发起请求

2 携带data(账号和密码)向目标url发送post请求

3 通过selenium来模拟登录 (input标签 切换登录方式 找到用户名和密码的输入框 定位按钮)

2.1cookie方式

2.1.1在爬虫程序中

第一种方式
Scrapy是一个强大的开源网络爬虫框架,能高效、稳定地实现数据采集自动化。以下是关于使用Scrapy进行数据采集的方法、教程及相关资料介绍: ### 方法 以不同实例说明使用Scrapy进行数据采集的方法: - **采集博客园MySQL类别文章信息**:可利用Scrapy从“博客园”的MySQL类别(https://www.cnblogs.com/cate/mysql/ )下采集文章的标题、摘要、发布日期、阅读数量这4个字段信息,最终成果为包含这4个字段的文本文件[^2]。 - **采集微信开发者社区文档信息**:通过编写代码实现采集,定义 `ArticleItem` 类来存储采集的数据,包含 `title`、`content`、`author` 字段。使用 `CrawlSpider` 进行抓取,设置允许的域名、起始URL和规则,在 `parse_article` 方法中解析响应并提取所需信息,最后使用 `yield` 输出采集到的数据。示例代码如下: ```python # items.py import scrapy class ArticleItem(scrapy.Item): title = scrapy.Field() content = scrapy.Field() author = scrapy.Field() # weixin_spider.py import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from weixin_spider.items import ArticleItem class WeixinSpider(CrawlSpider): name = 'weixin_spider' allowed_domains = ['weixin.qq.com'] start_urls = ['https://developers.weixin.qq.com/community/develop/doc/0008c44fa43768b7f22a3b3e151c00'] rules = ( Rule(LinkExtractor(allow=r'/community/develop/doc/\w+'), callback='parse_article'), ) def parse_article(self, response): item = ArticleItem() item['title'] = response.xpath('//title/text()').get() item['content'] = response.xpath('//body').get() # 举例获取整个 body 内容,具体根据实际情况提取 item['author'] = response.xpath('//author/text()').get() # 假设有作者信息 yield item ``` - **采集豆瓣电影Top250详细数据**:先删除默认代码,定义 `Douban2025Item` 类来存储采集的数据,包含排名序号、电影名称、详情链接地址、评分、参评人数、最新评论、类别标签、首映年份、国家和地区、导演、语言、五星好评率等字段。示例代码如下: ```python import scrapy class Douban2025Item(scrapy.Item): rank = scrapy.Field() # 排名序号 title = scrapy.Field() # 电影名称 link = scrapy.Field() # 电影详情链接地址 rating = scrapy.Field() # 电影评分 participants = scrapy.Field() # 参评人数 quote = scrapy.Field() # 最新评论 type = scrapy.Field() # 类别标签 year = scrapy.Field() # 首映年份 area = scrapy.Field() # 国家和地区 director = scrapy.Field() # 导演(第一导演) language = scrapy.Field() # 语言 star = scrapy.Field() # 五星好评率 ``` ### 教程 可通过实际实例学习Scrapy数据采集,如以博客园MySQL类别文章采集为例,明确任务是采集该类别下所有文章的标题、摘要、发布日期、阅读数量这4个字段,最终生成包含这些字段的文本文件,按照此流程和要求进行操作学习[^2]。 ### 相关资料 可参考相关文章,如介绍如何使用Scrapy进行数据采集自动化,涵盖Scrapy的核心概念、算法原理、实际应用以及相关资源推荐等方面的文章,以深入了解Scrapy数据采集相关知识[^1]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔记本IT

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值