首页 > 其他分享 >Scrapy爬虫文件代码基本认识和细节解释

Scrapy爬虫文件代码基本认识和细节解释

时间:2023-07-17 11:44:06浏览次数:35  
标签:name forum item Scrapy 爬虫 start scrapy 细节 response

import scrapy
from scrapy.http.request import Request
from scrapy.http.response.html import HtmlResponse
from scrapy_demo.items import ForumItem


class BaiduSpider(scrapy.Spider):
    # name必须是唯一的,因为运行一个爬虫是通过name来选择的。
    # 你需要运行命令行:scrapy crawl <name> 来执行爬虫
    name = "tieba"

    # 爬取数据的限制范围
    # 比如有时候baidu.com中就可能会加载其他域名的数据比如123.com。如果不限制scrapy会连123.com也爬。
    #
    allowed_domains = ["baidu.com"]

    # 第一次发起请求的URL,这个都是要修改的
    # 默认值是你用命令行方式创建一个爬虫时指定的<domain>
    # 命令行:scrapy genspider <name爬虫名> <domain(也就是start_urls的默认值)>
    start_urls = ["https://tieba.baidu.com"]

    def parse(self, response: HtmlResponse, **kwargs):
        """
        这个方法是自动生成的(你用scrapy genspider命令才会生成呀》。。)
        parse方法用于定义如何处理数据的
        我们主要是写这个方法.
        """
        # print(response)
        # print(type(response))
        req = response.request  # type: Request
        # print(req.url)

        # 获取响应体
        # response.body.decode("utf-8")  # 二进制数据需要decode() 这个和lxml的response.content是一样的、
        # print(response.text)

        # 使用xpath提取数据
        items = response.xpath("//ul[@id='forumList']/li[@class='rcmd_forum_item']")
        
        # 使用css选择器提取数据
        # -css取文本
        # 'a.link-title::text'
        # -css取属性
        # 'img.image-scale::attr(src)'
        # response.css()
        # response.csss("")

        result = []

        for item in items:
            forum_name = item.xpath("./a/div[@class='rcmd_forum_info']/div[@class='forum_name']/text()").get()
            forum_member = item.xpath("./a/div[@class='rcmd_forum_info']/div[@class='forum_member']/text()").get()

            # 以前我们都是自己构建字典来存储数据,现在可以用scrapy提供的Item模型类来存储数据
            # 当然了不是说你不能使用字典存,只是建议用Scrapy提供的Item模型类来存储
            # result.append({
            #     "forum_name": forum_name,
            #     "forum_member": forum_member
            # })

            # 使用框架的Item模型类来代替以前的字典
            forum_item = ForumItem()
            forum_item["forum_name"] = forum_name
            forum_item["forum_member"] = forum_member
            # 每执行yield一次,就会丢给pipeline来处理
            yield forum_item


        # print(result)

        # parse()函数中使用yield返回数据给Pipelines,
        # 注意:parse()函数中的yield能够传递的对象只能是:BaseItem, Request, dict, None
        # yield {"result": result}

    def start_requests(self):
        """
        默认爬虫第一次发起的请求是start_urls中指定的URL列表,然而默认的请求方式是GET请求
        如果你第一次请求是POST,就必须重写这个方法,然后修改请求方式
        """
        if not self.start_urls and hasattr(self, "start_url"):
            raise AttributeError(
                "Crawling could not start: 'start_urls' not found "
                "or empty (but found 'start_url' attribute instead, "
                "did you miss an 's'?)"
            )
        for url in self.start_urls:
            # 修改默认的请求方式为POST
            yield Request(url, dont_filter=True, method="GET")

标签:name,forum,item,Scrapy,爬虫,start,scrapy,细节,response
From: https://www.cnblogs.com/juelian/p/17559630.html

相关文章

  • 一些细节记录
    (125条消息)linux源码中__asm____volatile__作用_asmvolatile_liu-yonggang的博客-CSDN博客Makefile中.PHONY的作用-veli-博客园(cnblogs.com)......
  • 爬虫 | <Response [418]>原因
    在我们调用requests.get(网址)访问网页时,输出为<Response[418]>。是什么原因呢?如下运行代码:#导入访问网页要用的库importrequests#申明一个变量存储网址#网址是一个字符串变量,注意网址前后都必须有引号url='https://movie.douban.com'#用requests.get(网址)访问......
  • @Async组件的细节说明
    使用方式启动类里面使用@EnableAsync注解开启功能,自动扫描定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async@Async失效情况注解@Async的方法不是public方法注解@Async的返回值只能为void或者Future注解@Async方法使用static修饰也会失......
  • python爬虫抓取小说
    我这里是使用的requests模块和re(正则)模块可以模仿浏览器正常访问网页返回网页源码的方式,通过正则获取到小说的名字,以及每个章节名称和对应的网页链接,并将小说正文截取出来,写入到文本中,具体代码实现如下:#导入requests模块importrequests#导入re(正则)模块importre#下......
  • Scrapy 专题
    安装scrapy-pipinstallscrapy创建项目并创建spider,跑起来-scrapystartprojectscrapy_demo1-cdscrapy_demo1-scrapygenspiderbaidubaidu.com-scrapycrawlbaidu报错记录-AttributeError:module‘OpenSSL.SSL’hasnoattribute‘SSLv3_METHO......
  • 关于scrapy框架的学习
    最近打算参加一个爬虫比赛,特来研究爬虫,在掌握了爬虫的基本实现后,我们需要用一个更高效的方式来写爬虫这个时候便用到了爬虫框架scrapyscrapy是什么?Scrapy是一个应用程序框架,用于对网站进行爬行和提取结构化数据,这些结构化数据可用于各种有用的应用程序,如数据挖掘、信息处......
  • 「爬虫04」selenium
    1selenium等待元素加载#程序执行速度很快---》获取标签---》标签还没加载好---》直接去拿会报错#显示等待:当你要找一个标签的时候,给它加单独加等待时间#隐士等待:只要写一行,代码中查找标签,如果标签没加载好,会自动等待 browser.implicitly_wait(10)2selenium元素操作#......
  • scrapy-redis 用法举例 解析
     scrapy-redis是一个用于将Scrapy分布式爬虫与Redis数据库相结合的库,可以使得多个Scrapy爬虫实例共享爬取任务队列和爬取结果数据等信息。下面是scrapy-redis的用法举例:安装scrapy-redis:pipinstallscrapy-redis 假设我们要爬取豆瓣电影TOP250的电影信息,......
  • scrapy用法举例 (Scrapy爬取豆瓣电影Top250)
    Scrapy是一个Python的爬虫框架,用于快速开发和部署Web爬虫。它提供了一套完整的爬虫工具,包括爬虫的调度、数据下载、数据处理和存储等功能,同时也支持多线程、分布式和异步IO等高级特性。以下是Scrapy的用法介绍:1.安装ScrapyScrapy可以通过pip安装,命令如下:pipinstal......
  • 爬虫突破验证码技巧 - 2Captcha
    在互联网世界中,验证码作为一种防止机器人访问的工具,是爬虫最常遇到的阻碍。验证码的类型众多,从简单的数字、字母验证码,到复杂的图像识别验证码,再到更为高级的交互式验证码,每一种都有其独特的识别方法和应对策略。在这篇文章中,我们将一一介绍各种验证码的工作原理和使用2Captcha进......