Scrapy框架-阳光政务平台爬虫(二)

Scrapy框架-阳光政务平台爬虫(二)

想要爬取的网站:微信读书
爬取内容:各个排行榜中的 书名 作者名 详情页网站 评分 出版社 出版日期
文末有工程文件

items.py设置

  • 配置items.py文件
  • items.py文件中NameItem(scrapy.Item)类中写入
name = scrapy.Field()
author = scrapy.Field()
grade = scrapy.Field()
press = scrapy.Field()
publish_date = scrapy.Field()
detail_url = scrapy.Field()
  • 这一部分相当于整合信息条目,而且方便检查在写爬虫文件时的拼写错误

setting.py设置

  • 开启并修改网络代理
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29'

  • 添加日志打印等级
LOG_LEVEL = "WARNING"
  • 开启pipeline交互,若不开启,爬虫文件的数据就无法传递给pipeline.py文件
ITEM_PIPELINES = {
'yangguang.pipelines.YangguangPipeline': 300,
}

主爬虫内容

  • 代码
    import scrapy
import re
from ..items import WxbookItem

class WxSpider(scrapy.Spider):
    name = 'wx'
    allowed_domains = ['weread.qq.com']
    start_urls = ['https://weread.qq.com/web/category/']

    def parse(self, response):

        li_list = response.xpath('//ul[@class="ranking_list"]/li')
        for li in li_list:
            item = WxbookItem()
            rank_url = 'https://weread.qq.com' + li.xpath('./a/@href').extract_first()

            yield scrapy.Request(
                rank_url,
                callback=self.parse_rank_0,
                meta={"item": item}
            )

    def parse_rank_0(self, response):
        item = response.meta["item"]

        div_list = response.xpath('//div[@class="ranking_page_header"]/div/div')
        num_0 = re.sub("\D", "", response.url)
        rank_num = 0
        rank_url_2 = []
        try:
            for div in div_list:
                rank_num += 1
            for num in range(rank_num):
                rank_url_2.append('https://weread.qq.com/web/category/' + str(int(num_0)+num))
            for url in rank_url_2:
                yield scrapy.Request(
                    url,
                    callback=self.parse_rank_1,
                    meta={"item": item}
                    )
        except:
            pass

    def parse_rank_1(self, response):
        item = response.meta["item"]
        li_list = response.xpath('//ul[@class="ranking_content_bookList"]/li')
        for li in li_list:
            item["author"] = li.xpath('./div[1]/div[2]/p[2]/a/text()').extract_first()
            item["grade"] = li.xpath('./div[1]/div[2]/p[3]/span[3]/span/text()').extract_first()
            item["detail_url"] = 'https://weread.qq.com' + li.xpath('./a/@href').extract_first()

            yield scrapy.Request(
                item["detail_url"],
                callback=self.parse_detail,
                meta={"item": item}
                )

    def parse_detail(self, response):
        item = response.meta["item"]
        item["detail_url"] = response.url
        item["name"] = response.xpath('//div[@class="bookInfo_right"]/h2/div/text()').extract_first()
        item["author"] = response.xpath('//div[@class="bookInfo_right"]/div/a/text()').extract_first()
        item["press"] = response.xpath('//div[@class="wr_dialog"]/div/div/div[2]/span[2]/text()').extract_first()
        item["grade"] = response.xpath('//div[@class="book_ratings_container"]/div[2]/div[1]/span[1]/text()').extract_first()
        item["publish_date"] = response.xpath('//div[@class="wr_dialog"]/div/div/div[3]/span[2]/text()').extract_first()
        print(item)

  • 几点注意事项
  • 一定要导入item类,否则无法保存信息
  • allowed_domains一定要写对,特别是自己定义的函数(parse_detail)所用的url一定要在allowed_domains的范围内,否则会不执行回调函数。
    比如回调函数请求网站:[https://book.douban.com/top250?start=1]
    而allowed_domains = [“douban.com”] 就无法正常回调

pipeline.py设置

  • 代码
class WxbookPipeline:
def process_item(self, item, spider):
    print(item["name"])
    return item

自定义run.py

  • 之前的文章说过,跑scrapy程序需要在命令行中输入scrapy crawl xxx
    这种在命令行中的交互方式实在不方便,那我们在工程目录下定义一个run.py文件就可以直接在pycharm里运行这个run.py文件就能实现在pycharm里进行交互了。
  • 代码
from scrapy import cmdline

cmdline.execute('scrapy crawl wx'.split())

结果

{'author': '黑格尔',
 'detail_url': 'https://weread.qq.com/web/reader/bbe32a1072051bbdbbed499',
 'grade': ' 90.0',
 'name': '精神现象学·上卷(汉译世界学术名著丛书)',
 'press': '商务印书馆',
 'publish_date': '1979年6月'}

链接: 工程文件

Original: https://blog.csdn.net/weixin_43848766/article/details/121890593
Author: Goker123
Title: Scrapy框架-阳光政务平台爬虫(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/789353/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • docker学习:docker命令

    帮助命令 自验证*docker version 详情信息*docker info 获取帮助*docker –help 镜像命令 列出本例主机上的镜像 docker im…

    Python 2023年6月12日
    066
  • 云原生之旅 – 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像

    前言 前一篇文章【云原生之旅 – 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents】有讲到在 Kubernetes Pod (Jen…

    Python 2023年10月14日
    046
  • 踩坑 Windows 服务来宿主 .NET 程序

    本文所指的 .NET 程序为 .NET6 的程序。因为 .NET 的版本更新很快,所以方式、方法也有变化,所以网上搜到的方法有些也过时了。以下是最近我实践下来的一点心得(坑)。上一…

    Python 2023年10月23日
    039
  • Django的Session和cookie

    Session和cookie 参考文献: https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.问题引入 1.1 cook…

    Python 2023年8月6日
    038
  • Django学习日志三:模型层

    下面我们来学习模型层的使用: 五、模型层 模型层用于和数据交互。可以通过模型和关系型数据库实现持久化的操作。在Django开发中主要以MySQL作为首选数据库,同时使用非关系型数据…

    Python 2023年8月5日
    042
  • Python之Pygame学习笔记–1

    Python之Pygame学习笔记–1 废话不多说,直接开始干货。 此处我们将以案例的形式讲解 Pygame 的相关知识,本文将绘制圆形,矩形,动图这三个简单的案例。 说实话,个人…

    Python 2023年9月21日
    064
  • SPL工业智能:发现时序数据的异常

    基本问题 工业生产过程中会产生大量的数据,比如电压、温度、流量等等,它们随时间推移而不断产生,这些数据在多数情况下是正常的,否则生产无法正常进行;少数情况下,数据是异常的,生产效率…

    Python 2023年10月24日
    033
  • 虚拟环境管理工具——venv+pip

    最近做项目用了pipenv,经常报错,而且lock特慢。果断弃用,换venv。结果特清爽,感觉又快又好。 venv venv是Python标准库内置的虚拟环境管理工具,Python…

    Python 2023年8月11日
    051
  • 五年经验的前端社招被问:CPU 和 GPU 到底有啥区别?

    首先来看 CPU 和 GPU 的百科解释: CPU(Central ProcessingUnit,中央处理器):功能主要是解释计算机指令以及处理计算机软件中的数据 GPU(Grap…

    Python 2023年10月12日
    034
  • Nodejs调用python的几种方案

    nodejs可以使用JavaScript进行后端应用开发,同时使用electron可以开发桌面应用,可以说是相当强大。如果要在nodejs中读取本地文件则可以使用fs模块进行,ff…

    Python 2023年8月15日
    037
  • 面试突击79:Bean 作用域是啥?它有几种类型?

    Spring 框架作为一个管理 Bean 的 IoC 容器,那么 Bean 自然是 Spring 中的重要资源了,那 Bean 的作用域是什么意思?又有几种类型呢?接下来我们一起来…

    Python 2023年10月23日
    054
  • matplotlib之直方图

    文本以及后续的系列文章中均会使用到numpy这个库,numpy是Python的一种开源的数值计算扩展,主要用来生产一些随机数作为绘图的原始数据。具体和安装matplotlib类似,…

    Python 2023年8月30日
    044
  • 模块

    模块介绍 在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。如果把开发程序比喻成制造一台电脑,编写模块就像是在…

    Python 2023年5月24日
    077
  • 数据结构——数组

    数组是程序中最常见的数据结构,它可以存储一个固定大小的相同类型元素的顺序集合(强类型语言)。数组的元素都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素…

    Python 2023年6月12日
    064
  • python画图不显示中文标题

    在python画图时出时图是可以画出来的,但是却不显示标题,例如 import matplotlib.pyplot as plt values =list(range(1,10))…

    Python 2023年8月31日
    044
  • python之sys模块详解

    前言 sys模块是与python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。 处理命令行参数 在解释器启动后, argv 列表…

    Python 2023年7月31日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球