Scrapy翻页爬取示例——列表页、详情页
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翻页爬取示例——列表页、详情页相关推荐
- scrapy爬取猫眼电影及详情页
本来是在学习matplotlib画图的,发现自己没有数据去画图光看命令效果好像不是特别大,就想着去猫眼爬点电影来画图.然后就想着刚好练习下以前学过的scrapy,然后悲剧就开始了. 整个spider的 ...
- 数据分析实战二:爬取淘宝商品详情页进行分析
对淘宝商品信息进行数据分析 项目流程: 1.数据获取 2.数据清洗 3.数据分析与可视化 数据获取(爬虫) 淘宝数据是通过动态加载的方式显示的,所以采用selenium模拟浏览器操作爬取商品页详情信息 ...
- Python爬取淘宝商品详情页数据
在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示: 当这个插件处于关闭状态时,待爬取 ...
- Python 爬取懂车帝详情页“全部车型模块信息”!懂车帝就火起来了吗?
需要爬取的内容:汽车具体型号,指导价,经销商报价,车主参考价 import requests import pymysql # 车型库 def Dongchedi(offset): url = 'ht ...
- python 爬取懂车帝详情页“全部车型模块信息”
需要爬取的内容:汽车具体型号,指导价,经销商报价,车主参考价 import requests import pymysql# 车型库 def Dongchedi(offset):url = 'http ...
- 【Python爬虫实战】爬取网易新闻某详情页信息 1.0
文章目录 一.网页分析 二.代码实现 三.总结 一.网页分析 本次爬取目标网站为 https://www.163.com/dy/article/G0F6HT9A051186GP.html 爬取对象为新 ...
- 爬取微信公众号详情页
需求 :爬取一个微信公众号,获取文章里面的图片并把它下载到本地,上传到阿里云,修改原文章的图片地址 import requests import re import os import json im ...
- [Python Scrapy爬虫] 二.翻页爬取农产品信息并保存本地
前面 "Python爬虫之Selenium+Phantomjs+CasperJS" 介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分 ...
- selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称
翻页爬取网易云音乐歌单作者和标题 案例目的: 通过翻页selenium操作网易云音乐,介绍如何切换iframe框架以及如何使用selenium定位数据所在的节点. 代码功能: 输入下载的数据页数,自动 ...
最新文章
- 微信小程序——tab切换内容
- DbVisualizer Personal 7.0 数据库连接工具免安装版本获取,直接解压即可使用!
- 线程:CountDownLatch同步工具
- iOS键盘弹出通知后加入动画
- 监督学习和非监督学习
- 论文浅尝 | 基于多原型mention向量的文本-实体联合学习
- maven 热部署 web应用
- 【MySQL】数据库基本操作、表的操作
- linux能力集机制,linux能力机制
- 什么情况下document.write会覆盖页面及覆盖原理解释
- 使用XenApp/XenDesktop发布App-V应用——安装App-V服务器
- Visio2013 Professional专业版密钥
- 手把手教你获得CSDN徽章:CSDN IT冷知识 每日一练
- Mac谷歌浏览器添加JSONView的插件以提高开发的效率
- 湖北为何迷失在中国互联网版图 应“引凤归巢”
- 对你快速了解恶意软件以及病毒和反病毒
- fabs linux头文件,C/C++ algorithm头文件的max()、min()、abs()和math头文件的fabs(
- 移动H5 iPhone audio没有声音(声音不同步)问题的解决方式
- 冯诺依曼结构、哈佛结构、改进型哈佛结构
- BAT大佬带你了解“渠道”
热门文章
- 【Cesium入门】四、相机系统
- Vue组件之间的通信-父传子-子传父
- 网易云课堂-数据结构-练习题实现-00,打印沙漏
- 越南语常用的计数词,多少钱用越南语怎么说
- Date.getyear()、Date.getMonth()、Date.getDay() 已经作废,其他解决办法
- 兑换记录html页面,兑换码记录.html
- 用spss进行数据的标准化处理_什么是数据标准化、中心化、归一化?SPSS又如何实现?...
- 论文框架和目录一样吗_毕业论文提纲怎么写?过来人:手把手帮你打造完美论文写作模板...
- ESP32S2(12K)-DS18B20数码管显示温度
- 微信小程序:独家全新娱乐性超高的喝酒神器