python中spider的用法_python网络爬虫 CrawlSpider使用详解
CrawlSpider
作用:用于进行全站数据爬取
CrawlSpider就是Spider的一个子类
如何新建一个基于CrawlSpider的爬虫文件
scrapy genspider -t crawl xxx www.xxx.com
例:choutiPro
LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取
Rule规则解析器:将连接提取器提取到的连接进行请求发送,然后对获取的页面进行指定规则【callback】的解析
一个链接提取器对应唯一一个规则解析器
例:crawlspider深度(全栈)爬取【sunlinecrawl例】
分布式(通常用不到,爬取数据量级巨大、时间少时用分布式)
概念:可将一组程序执行在多态机器上(分布式机群),使其进行数据的分布爬取
原生的scrapy框架是否可以实现分布式?
不能
抽屉
# spider文件
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class ChoutiSpider(CrawlSpider):
name = 'chouti'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://dig.chouti.com/1']
# 连接提取器:从起始url对应的页面中提取符合规则的所有连接;allow=正则表达式
# 正则为空的话,提取页面中所有连接
link = LinkExtractor(allow=r'\d+')
rules = (
# 规则解析器:将连接提取器提取到的连接对应的页面源码进行指定规则的解析
# Rule自动发送对应链接的请求
Rule(link, callback='parse_item', follow=True),
# follow:True 将连接提取器 继续 作用到 连接提取器提取出来的连接 对应的页面源码中
)
def parse_item(self, response):
item = {}
#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
#item['name'] = response.xpath('//div[@id="name"]').get()
#item['description'] = response.xpath('//div[@id="description"]').get()
return item
阳光热线网
# 1.spider文件
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunLineCrawl.items import SunlinecrawlItem,ContentItem
class SunSpider(CrawlSpider):
name = 'sun'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=']
link = LinkExtractor(allow=r'type=4&page=\d+') # 提取页码连接
link1 = LinkExtractor(allow=r'question/2019\d+/\d+\.shtml') # 提取详情页连接
rules = (
Rule(link, callback='parse_item', follow=False),
Rule(link1, callback='parse_detail'),
)
# 解析出标题和网友名称数据
def parse_item(self, response):
tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')
for tr in tr_list:
title = tr.xpath('./td[2]/a[2]/text()').extract_first()
net_friend = tr.xpath('./td[4]/text()').extract_first()
item = SunlinecrawlItem()
item['title'] = title
item['net_friend'] = net_friend
yield item
# 解析出新闻的内容
def parse_detail(self,response):
content = response.xpath('/html/body/div[9]/table[2]//tr[1]/td/div[2]//text()').extract()
content = ''.join(content)
item = ContentItem()
item['content'] = content
yield item
--------------------------------------------------------------------------------
# 2.items文件
import scrapy
class SunlinecrawlItem(scrapy.Item):
title = scrapy.Field()
net_friend = scrapy.Field()
class ContentItem(scrapy.Item):
content = scrapy.Field()
--------------------------------------------------------------------------------
# 3.pipelines文件
class SunlinecrawlPipeline(object):
def process_item(self, item, spider):
# 确定接受到的item是什么类型(Content/Sunlinecrawl)
if item.__class__.__name__ == 'SunlinecrawlItem':
print(item['title'],item['net_friend'])
else:
print(item['content'])
return item
--------------------------------------------------------------------------------
# 4.setting文件
BOT_NAME = 'sunLineCrawl'
SPIDER_MODULES = ['sunLineCrawl.spiders']
NEWSPIDER_MODULE = 'sunLineCrawl.spiders'
LOG_LEVEL = 'ERROR'
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
'sunLineCrawl.pipelines.SunlinecrawlPipeline': 300,
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python中spider的用法_python网络爬虫 CrawlSpider使用详解相关推荐
- python中的sep参数_Python sep参数使用方法详解
Python sep参数使用方法详解 这篇文章主要介绍了Python sep参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pyth ...
- python中flush什么意思_python flush()定义及作用详解(实例分析)
今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思.这些东西我 ...
- python 读取图片转换为一维向量_对Python中一维向量和一维向量转置相乘的方法详解...
对Python中一维向量和一维向量转置相乘的方法详解 在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况.但是在pyth ...
- python什么意思k_对python中的*args与**kwgs的含义与作用详解
对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...
- python2.7除法_对python中的float除法和整除法的实例详解
从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...
- python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...
- python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- Python中常见的__init__.py是什么意思?详解Python import的方式和原理
Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...
- args在python中什么意思_对python中的*args与**kwgs的含义与作用详解
在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...
最新文章
- RocketMQ高性能之底层存储设计
- 成功解决ValueError: With n_samples=0, test_size=0.3 and train_size=None, the resulting train set will be
- GetWindowRect() 和 GetClientRect() 的区别
- 如何在IE右键菜单中添加自定义项
- Django与jQuery通信;Django前后端传值
- mysql集群之keepalived简单搭建
- “System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results fro
- JavaScript中的ParseInt(08)和“09”返回0的原因分析及解决办法
- linux 串口是否可写,串口编程可写入不能读取 怎么解决
- linux内核配置usb虚拟串口,霍尼韦尔是否能提供USB串口仿真的Linux驱动程序?
- 记录一个可以word,xls,PDF互转思维导图的工具
- linux管理员下安装网易云,在Ubuntu 18.10系统中安装网易云音乐的方法
- visio付款流程图_visio画程序流程图(转)
- 【网站集合】【Windows】程序员常用网站一览
- 动态规划算法实现0/1背包问题
- 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级
- Qt的QBuffer
- 电商网络支付结算风险与防范
- SAP PP 笔记(一) 概述
- 全面解析5种常见悬挂——连杆支柱悬挂
热门文章
- CSE 110: Principles of Programming Languages
- XML入门经典(第4版)pdf
- 项目展示-新浪微博客户端
- 模电之半导体基础篇3(半导体二极管、二极管应用)
- 露出暴露自拍论坛_如何照出高质感的自拍?——18个技巧,值得收藏
- Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—cnpm的安装与配置(3)
- mysql表级锁和行级锁_MySQL表级锁和行级锁
- 深度系统安装移动硬盘启动_深度系统如何安装_电脑知识
- 使用Python实现电子邮件群发功能
- 使用Jupyter Notebook+bokeh绘图入门完整步骤