Scrapy翻页爬取示例——列表页、详情页

引言: 本人最近在帮助同事们爬取一批英—泰双语数据,顺带复习了一下scrapy爬虫相关的知识。下面以简单的小项目为例,一起来开始吧!

示例一:爬取列表页

本文以这个网站为例:https://engoo.co.th/app/words/list/en/a

网站首页如图:

向下翻会看到翻页的小图标:

假如我们要获取1-17页该页面上所有的字符串,如下所示:

应该如何做?

先给出代码(仅逻辑实现部分):

    def parse(self, response):divs = response.xpath("//div[@class='css-rv942s']")for div in divs:item = ThaiItem()item['en'] = div.xpath("./span[@class='css-1sylyko']/a/text()").extract_first()item['thai'] = div.xpath("./span[@class='css-epvm6']/span/div[@class='css-jiq801']/text()").extract_first()yield item# 获取字符串,构造下一页请求地址next = response.xpath("//div[@class='css-x9n345']/div/a[last()]/@href").extract_first()new_url = 'https://engoo.co.th' + nextyield scrapy.Request(url=new_url, callback=self.parse)

分析:构造获取下一页的请求很重要,要想办法得到下一页的请求。在这个例子中,下一页的请求永远在最后一个a标签的href属性中。

例如当前我们在第三页,看一下网页布局:

示例二:爬取详情页

网页中蓝色部分的英文都是超链接,点击进入详情页:

如何通过首页进入到详情页并爬取其中的内容呢?见以下代码:

首先通过start_requests函数获取所有首页起始地址:

    def start_requests(self):# 获取全部翻页链接for i in range(1, 17):url = 'https://engoo.co.th/app/words/list/en/a?page=' + str(i)yield scrapy.Request(url=url)

紧接着,获取首页上每个英文单词的超链接:

# 获取每页的urldef parse(self, response):urls = response.xpath("//div[@class='css-rv942s']/span/a/@href").extract()for url in urls:url_new = "https://engoo.co.th" + urlyield scrapy.Request(url_new, callback=self.parse_item)

重要:通过start_requests函数得到起始地址后,直接在parse函数获得url字符串,拼接得到详情页的地址:url_new。详情页的内容通过Request发送到parse_item函数进行解析。

parse_item函数代码如下:

    def parse_item(self, response):divs_top = response.xpath("//div[@class='css-1p8520y']")item = ThaiItem()for div in divs_top:en_text_l = div.xpath(".//div/span[@class='css-79elbk']/span//text()").extract()en_text = ''.join(en_text_l)item['en_text'] = en_textitem['thai_text'] = div.xpath(".//div[@class='css-79elbk']/span[@lang='th']/span/text()").extract_first()# print(item)yield itemdivs_bot = response.xpath("//div[@class='css-kp3nri']")for div in divs_bot:item['en_text'] = div.xpath("./div[@class='css-nipsa6']/span[@class='css-35ezg3']/text()").extract_first()item['thai_text'] = div.xpath("./div[@class='css-nipsa6']/span[@class='css-l3ddl3']/text()").extract_first()# print(item)yield item

最后将详情页的内容通过pipelines保存:

class ThaiPipeline:def process_item(self, item, spider):res = dict(item)en_text = res['en_text']thai_text = res['thai_text']with open('save.txt', 'a', encoding='utf-8') as fw:fw.write(en_text + '\t' + thai_text + '\n')return item

反思:写作时思路很混乱,排版也比较粗糙,见谅,领会精神 > w < !!!

Scrapy翻页爬取示例——列表页、详情页相关推荐

  1. scrapy爬取猫眼电影及详情页

    本来是在学习matplotlib画图的,发现自己没有数据去画图光看命令效果好像不是特别大,就想着去猫眼爬点电影来画图.然后就想着刚好练习下以前学过的scrapy,然后悲剧就开始了. 整个spider的 ...

  2. 数据分析实战二:爬取淘宝商品详情页进行分析

    对淘宝商品信息进行数据分析 项目流程: 1.数据获取 2.数据清洗 3.数据分析与可视化 数据获取(爬虫) 淘宝数据是通过动态加载的方式显示的,所以采用selenium模拟浏览器操作爬取商品页详情信息 ...

  3. Python爬取淘宝商品详情页数据

      在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示: 当这个插件处于关闭状态时,待爬取 ...

  4. Python 爬取懂车帝详情页“全部车型模块信息”!懂车帝就火起来了吗?

    需要爬取的内容:汽车具体型号,指导价,经销商报价,车主参考价 import requests import pymysql # 车型库 def Dongchedi(offset): url = 'ht ...

  5. python 爬取懂车帝详情页“全部车型模块信息”

    需要爬取的内容:汽车具体型号,指导价,经销商报价,车主参考价 import requests import pymysql# 车型库 def Dongchedi(offset):url = 'http ...

  6. 【Python爬虫实战】爬取网易新闻某详情页信息 1.0

    文章目录 一.网页分析 二.代码实现 三.总结 一.网页分析 本次爬取目标网站为 https://www.163.com/dy/article/G0F6HT9A051186GP.html 爬取对象为新 ...

  7. 爬取微信公众号详情页

    需求 :爬取一个微信公众号,获取文章里面的图片并把它下载到本地,上传到阿里云,修改原文章的图片地址 import requests import re import os import json im ...

  8. [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地

    前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...

  9. selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

    翻页爬取网易云音乐歌单作者和标题 案例目的: 通过翻页selenium操作网易云音乐,介绍如何切换iframe框架以及如何使用selenium定位数据所在的节点. 代码功能: 输入下载的数据页数,自动 ...

最新文章

  1. 微信小程序——tab切换内容
  2. DbVisualizer Personal 7.0 数据库连接工具免安装版本获取,直接解压即可使用!
  3. 线程:CountDownLatch同步工具
  4. iOS键盘弹出通知后加入动画
  5. 监督学习和非监督学习
  6. 论文浅尝 | 基于多原型mention向量的文本-实体联合学习
  7. maven 热部署 web应用
  8. 【MySQL】数据库基本操作、表的操作
  9. linux能力集机制,linux能力机制
  10. 什么情况下document.write会覆盖页面及覆盖原理解释
  11. 使用XenApp/XenDesktop发布App-V应用——安装App-V服务器
  12. Visio2013 Professional专业版密钥
  13. 手把手教你获得CSDN徽章:CSDN IT冷知识 每日一练
  14. Mac谷歌浏览器添加JSONView的插件以提高开发的效率
  15. 湖北为何迷失在中国互联网版图 应“引凤归巢”
  16. 对你快速了解恶意软件以及病毒和反病毒
  17. fabs linux头文件,C/C++ algorithm头文件的max()、min()、abs()和math头文件的fabs(
  18. 移动H5 iPhone audio没有声音(声音不同步)问题的解决方式
  19. 冯诺依曼结构、哈佛结构、改进型哈佛结构
  20. BAT大佬带你了解“渠道”

热门文章

  1. 【Cesium入门】四、相机系统
  2. Vue组件之间的通信-父传子-子传父
  3. 网易云课堂-数据结构-练习题实现-00,打印沙漏
  4. 越南语常用的计数词,多少钱用越南语怎么说
  5. Date.getyear()、Date.getMonth()、Date.getDay() 已经作废,其他解决办法
  6. 兑换记录html页面,兑换码记录.html
  7. 用spss进行数据的标准化处理_什么是数据标准化、中心化、归一化?SPSS又如何实现?...
  8. 论文框架和目录一样吗_毕业论文提纲怎么写?过来人:手把手帮你打造完美论文写作模板...
  9. ESP32S2(12K)-DS18B20数码管显示温度
  10. 微信小程序:独家全新娱乐性超高的喝酒神器