Python Scrapy 爬虫 - 爬取多级别的页面

互联网中众多的 scrapy 教程模板,都是爬取 下一页 → \rightarrow →下一页形式的,很少有 父级 → \rightarrow →子级 的说明。

本文介绍一些使用 scrapy 爬取三级网页的注意事项。


逐级别传递 item

如何将 item 的信息,从父级传送到子级,是多级别爬取的最重要部分。

Scrapy 用 scrapy.Request 发起请求时,可以带上 meta={'item': item},把之前已收集到的信息传递到新请求里。
在新请求里用 item = response.meta('item') 接受过来,item 就可以继续添加新的收集的信息了。

参考链接:Python Scrapy多层爬取收集数据

注意:meta字段的方法是浅拷贝,并非深拷贝,(可参考官方文档),所以如果 item 有多个字段时,要么在meta中多字段表示,要么使用深拷贝方法。

# 使用 scrapy 在多个 parse 中自上而下逐级传递 item 的方法
# method 1
import copyyield scrapy.Request(url=next_url, meta={'item': copy.deepcopy(item_before)}, dont_filter=True, callback=self.next_parse
)# method 2
yield scrapy.Request(url=next_url, meta={'thing1': thing1_before,'thing2': thing2_before}, dont_filter=True, callback=self.next_parse
)

是否需要进行 url去重操作?

如果二级页面的 url 是根据某内容来定义 url路径 的,因此会存在很多重复的 二级url,需要不去重操作。

去重机制:scrapy.Request() 的参数 dont_filter 默认是 False(去重)。
每 yield 一个 scrapy.Request(),就将 url参数 与调度器内已有的 url 进行比较,如果存在相同 url 则默认不入队列,如果没有相同的 url 则入队列,
如果想要实现不去重效果,需要将 dont_filter 改为 True

来自参考链接:spider爬取多级url

scrapy selector 的 extract 与 extract_first 方法

  • extract 以列表形式(记此列表为a)返回选择器中的 data 字段,
    extract_first 则返回上述列表a中的第一个元素(多为字符串)
  • 通常 extract 得到的列表中,只有一个元素,所以往往用 extract_first 即可。
    但若 extract 得到的列表中有多个元素,则需要使用 ''.join(a) 得到具体的字符串信息。
  • ' xxx '.strip() 可以用于去掉头尾空白字符

编写 pipeline 注意事项

  • 首先需要在设置中启动pipeline,才可以有效果
  • mkdir创建单级目录,makedirs创建多级目录
  • 需要首先dict(item)
  • 打开文件时
    • w 只可以写文件
    • w+ 可读可写,打开后立即清空
    • r 只可以读文件
    • r+ 可读可写
    • encoding 保存中文必选
  • 写json时,注意使用"而非'
  • json.dump(text, f, ensure_ascii=False, indent=4)可保存中文,并格式化json

启用 scrapy 日志功能

详细见参考链接

Scrapy logging settings

Python Scrapy 爬虫 - 爬取多级别的页面相关推荐

  1. Python scrapy爬虫爬取伯乐在线全部文章,并写入数据库

    伯乐在线爬虫项目目的及项目准备: 1.使用scrapy创建项目 2.创建爬虫,bole 域名 jobbole.com 3.Start_urls = ['http://blog.jobbole.com/ ...

  2. 福利向---Scrapy爬虫爬取多级图片网站

    1.目标站分析 目标站网址为https://52zfl.vip/zhaifuli/list_2_1.html 每页网址有若干链接,点击每个链接,是每部图片资源的详情页面,由于图片数量较多,涉及到翻页操 ...

  3. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  4. python爬电影_使用Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  5. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  6. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  7. Python动态爬虫爬取京东商品评论

    Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...

  8. Python POST 爬虫爬取掘金用户信息

    Python POST 爬虫爬取掘金用户信息 1. 概述 Python第三方库requests提供了两种访问http网页的函数,基于GET方式的get()函数和基于POST方式的post()函数. g ...

  9. python scrapy+Mongodb爬取蜻蜓FM,酷我及懒人听书

    1.初衷:想在网上批量下载点听书.脱口秀之类,资源匮乏,大家可以一试 2.技术:wireshark scrapy jsonMonogoDB 3.思路:wireshark分析移动APP返回的各种连接分类 ...

最新文章

  1. Python全栈开发day2
  2. NHibernate: Session.Save 采用版本控制时无必要地自动Update版本字段的问题
  3. 2019/1/14,15 Python今日收获
  4. python 创建文件、文件夹、获取目录
  5. DM365 u-boot 启动分析
  6. win7 mysql msi_windows下的Mysql安装与基本使用(msi)
  7. python line strip_Python进阶---python strip() split()函数实战(转)
  8. AWS AI 全面助力视频理解,GluonCV 0.6 轻松复现前沿模型
  9. 履带机器人动力总成_工业机器人在动力总成工厂智能化提升中的应用
  10. mysql 序列化存储_如何将类序列化并直接存储入数据库
  11. toxic comment classification 数据集
  12. easyUI之Messager(消息窗口)
  13. android View使用shape作为背景不能指定单边圆角的xml
  14. 8路抢答器c语言程序,多路抢答器c程序(原创)
  15. 利用oracle long类型字段,插入大文本
  16. Excel里怎么冻结某一行某一列
  17. 【英语语法入门】第43讲 假设(02)与现在事实相反的虚拟语气
  18. 2022 年中回顾|一文看懂预训练模型最新进展
  19. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求
  20. Safari 手机浏览器无法下载的问题

热门文章

  1. 【个人小结】一次数据库性能优化问题
  2. 什么是JavaBean、bean? 什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?
  3. java数组常见异常:下标越界、空指针异常
  4. 【算法基础四】C语言小项目实战---通讯录管理系统(单链表)
  5. 【KMP】OKR-Periods of Words
  6. 71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件
  7. bzoj4416 阶乘字符串 子集dp
  8. 代码随想录算法训练营第一天|704二分查找 27移除元素
  9. 使用RSA、MD5对参数生成签名与验签
  10. 魔兽争霸Trigger学习教程(0)