Python爬虫从入门到精通:(36)CrawlSpider实现深度爬取_Python涛哥
我们来看下CrawlSpider
实现深度爬取。
爬取阳光热线标题、状态、和详情页内容。
https://wz.sun0769.com/political/index/politicsNewest?id=1&type=4&page=
创建CrawlSpider工程
scrapy startproject sunPro
cd sunPro
scrapy genspider -t crawl sun www.xxx.com
修改配置文件等
页面解析
提取下页码链接
我们看到这个网站有很多页面,我们先来提取下页码链接。
很容易分析到页面链接的规律,写下正则:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass SunSpider(CrawlSpider):name = 'sun'# allowed_domains = ['www.xxx.com']start_urls = ['https://wz.sun0769.com/political/index/politicsNewest?id=1&type=4&page=']# 提取页码链接link = LinkExtractor(allow=r'id=1&page=\d+')rules = (Rule(link, callback='parse_item', follow=True),)def parse_item(self, response):print(response)
这里我们主要学习深度爬取,后面只用一页作为案例。follow=False
数据解析
我们来获取当前页的标题、详情页地址和状态
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunPro.items import SunproItemclass SunSpider(CrawlSpider):name = 'sun'# allowed_domains = ['www.xxx.com']start_urls = ['https://wz.sun0769.com/political/index/politicsNewest?id=1&type=4&page=']# 提取页码链接link = LinkExtractor(allow=r'id=1&page=\d+')rules = (Rule(link, callback='parse_item', follow=False),)# 页面数据解析def parse_item(self, response):li_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for li in li_list:title = li.xpath('./span[3]/a/text()').extract_first()detail_url = 'https://wz.sun0769.com' + li.xpath('./span[3]/a/@href').extract_first()status = li.xpath('./span[2]/text()').extract_first()# 保存item提交给管道item = SunproItem()item['title'] = titleitem['detail_url'] = detail_urlitem['status'] = status**手动发送请求**现在我们用手动发送请求的方式解析详情页数据:```python
# 页面数据解析
def parse_item(self, response):li_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for li in li_list:title = li.xpath('./span[3]/a/text()').extract_first()detail_url = 'https://wz.sun0769.com' + li.xpath('./span[3]/a/@href').extract_first()status = li.xpath('./span[2]/text()').extract_first()# 保存item提交给管道item = SunproItem()item['title'] = titleitem['detail_url'] = detail_urlitem['status'] = statusyield scrapy.Request(url=detail_url, callback=self.parse_detail, meta={'item': item})# 详情页数据解析
def parse_detail(self, response):content = response.xpath('/html/body/div[3]/div[2]/div[2]/div[2]/pre/text()').extract_first()item = response.meta['item']item['content'] = contentyield item
运行一下,我们就获取了全部数据
完整代码:
sum.py
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunPro.items import SunproItemclass SunSpider(CrawlSpider):name = 'sun'# allowed_domains = ['www.xxx.com']start_urls = ['https://wz.sun0769.com/political/index/politicsNewest?id=1&type=4&page=']# 提取页码链接link = LinkExtractor(allow=r'id=1&page=\d+')rules = (Rule(link, callback='parse_item', follow=False),)# 页面数据解析def parse_item(self, response):li_list = response.xpath('/html/body/div[2]/div[3]/ul[2]/li')for li in li_list:title = li.xpath('./span[3]/a/text()').extract_first()detail_url = 'https://wz.sun0769.com' + li.xpath('./span[3]/a/@href').extract_first()status = li.xpath('./span[2]/text()').extract_first()# 保存item提交给管道item = SunproItem()item['title'] = titleitem['status'] = statusyield scrapy.Request(url=detail_url, callback=self.parse_detail, meta={'item': item})# 详情页数据解析def parse_detail(self, response):content = response.xpath('/html/body/div[3]/div[2]/div[2]/div[2]/pre/text()').extract_first()item = response.meta['item']item['content'] = contentyield item
items.py
import scrapyclass SunproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()status = scrapy.Field()content = scrapy.Field()
Pipeline.py
class SunproPipeline:def process_item(self, item, spider):print(item)return item
settings.py
略~请自己学会熟练配置!
总结
CrawlSpider
实现的深度爬取
- 通用方式:
CrawlSpider
+Spider
实现
关注Python涛哥!学习更多Python知识!
Python爬虫从入门到精通:(36)CrawlSpider实现深度爬取_Python涛哥相关推荐
- Python爬虫新手入门教学(十八):爬取yy全站小视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫新手入门教学(十六):爬取好看视频小视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫新手入门教学(十五):爬取网站音乐素材
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫新手入门教学(二十):爬取A站m3u8视频格式视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文内容 Python爬虫新手入门教学(一):爬取豆瓣电影排行信息 Python爬虫新手入门 ...
- Python爬虫新手入门教学(十四):爬取有声小说网站数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- 爬虫实战入门到精通 ———某某网络的正则爬取壁纸
import requests import re url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 佛曰,网址不可发,不可发header ...
- python爬取今日头条热点新闻事件,Python爬虫实战入门五:获取JS动态内容—爬取今日头条...
之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的. 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成 ...
- python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...
- Python爬虫从入门到精通——爬虫实战:爬取今日头条图片新闻
分类目录:<Python爬虫从入门到精通>总目录 本文为实战篇,需提前学习Python爬虫从入门到精通中<基本库requests的使用>和<Ajax数据爬取(一):基本原 ...
最新文章
- 5G NGC — NWDAF 网络智能分析功能
- Houdini FX 14 重磅推出!(附下载方式)
- 中国煤炭行业十四五投资战略与供需形势分析报告2022版
- maven 发布到仓库
- 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)
- maven和docker_Java EE,Docker和Maven(技术提示#89)
- 中小企业上云多地域办公组网(SAG)解决方案
- c语言周信东实验答案,桂林电子科技大学-C语言-程序设计-习题-答案(周信东)-实验4--数-组...
- 如何给网站添加rss功能
- R语言空间权重矩阵columbus及画图
- 多媒体计算机辅助英语教学,多媒体计算机辅助英语教学的探究.pdf
- xmpp 服务研究(二) prosody 创建账户
- 20款简洁独特的logo设计
- C语言(C++)打开有规律名称的多个文件,并写入数据
- Luogu P5069 [Ynoi2015] 纵使日薄西山
- 第一次单元测验参考答案详解 mooc程序设计入门——翁凯
- 装配图中齿轮的画法_一级圆柱齿轮减速器装配图的画法
- JWT 实现登录认证 + Token 自动续期方案
- 如何用python执行macro_python与macro宏调用
- GASSHOW:野田洋次郎为东日本大地震丧生的罹难者所创的镇魂曲。
热门文章
- 计算机视觉中的数据流与模型训练代码总结!
- 电脑lol性能测试软件,lol电脑配置测试
- 平安人寿“内鬼”泄露近4万条公民信息
- dlib人脸识别代码解读
- #ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
- kalibr标定IMU随机变量(高斯分布)的方差
- 美团一面究竟有多难?
- android车载系统测试,【图】原生安卓来了!Polestar 2智能车联测试_汽车之家
- 西宁市财政局容灾备份项目
- win10 SystemParametersInfo 设置屏保 不好使_Acer 暗影骑士 N50-N92电脑如何重装win10?win10专业版系统重装教程...