Scrapy 框架 CrawlSpider 全站数据爬取
CrawlSpider 全站数据爬取
创建 crawlSpider 爬虫文件
scrapy genspider -t crawl chouti www.xxx.com
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule class CrawSpider(CrawlSpider):
name = 'craw'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://dig.***.com/r/scoff/hot/1']
#连接提取器:可以根据指定条件提取连接
link = LinkExtractor(allow=r'/r/scoff/hot/\d+')
# link1 = LinkExtractor(allow=r'/pic/$') 针对于第一页的 url 不同的 页面使用 rules = (
#规则解析器:将连接提取器提取到的连接对应的页面进行指定规则的数据解析
Rule(link, callback='parse_item', follow=True),
#参数follow=True:将连接提取器继续作用到连接提取器提取到的连接所有对应的页面中
# Rule(link1, callback='parse_item', follow=False),
) def parse_item(self, response):
print(response)
对于简介与详情不是一个 item 的存储
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule from tenPro.items import TenproItem, TenproItem_detail class TenSpider(CrawlSpider):
name = 'ten'
# allowed_domains = ['www.ccc.com']
start_urls = ['https://hr.****.com/position.php?&start=#a0']
rules = (
Rule(LinkExtractor(allow=r'&start=\d+#a'), callback='parse_item', follow=True),
Rule(LinkExtractor(allow=r'position_detail.php\?id ='), callback='parse_detail', follow=True),
) def parse_item(self, response):
# 岗位名称和类别
tr_list = response.xpath(
'//table[@class="tablelist"]/tr[@class="odd"] | //table[@class="tablelist"]/tr[@class="even"]')
for tr in tr_list:
title = tr.xpath('./td[1]/a/text()').extract_first()
kind = tr.xpath('./td[2]/text()').extract_first()
item = TenproItem()
item['title'] = title
item['kind'] = kind
yield item def parse_detail(self, response):
desc = response.xpath('//ul[@class="squareli"]//text()').extract()
desc = ''.join(desc)
item = TenproItem_detail()
item['desc'] = desc yield itemimport scrapy class TenproItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
kind = scrapy.Field()
# pass
class TenproItem_detail(scrapy.Item):
desc = scrapy.Field()
# 分别进行存储 利用数据库的 多表联查 或数据解析
class TenproPipeline(object):
def process_item(self, item, spider):
desc = None
if item.__class__.__name__ == 'TenproItem_detail':
desc = item['desc']
else:
title = item['title']
kind = item['kind']
print(item)
return item
思路:
基于手动请求发送的形式:对所有页面表示的url发起请求,获取页面数据,进行解析
基于CrawlSpider的形式:使用链接提取器和规则解析器进行所有页面对应页面数据的获取也指定数据的解析
Scrapy 框架 CrawlSpider 全站数据爬取的更多相关文章
- 基于Scrapt框架的全站数据爬取
创建scrapy工程项目,除了爬虫文件中的代码需要略微修改,其他模块用法相同(如中间件,管道等): 爬虫文件代码流程 导入链接提取器 from scrapy.linkextractors import ...
- scrapy框架之CrawlSpider全站自动爬取
全站数据爬取的方式 1.通过递归的方式进行深度和广度爬取全站数据,可参考相关博文(全站图片爬取),手动借助scrapy.Request模块发起请求. 2.对于一定规则网站的全站数据爬取,可以使用Cra ...
- scrapy框架基于CrawlSpider的全站数据爬取
引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...
- python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL
一.先在MySQL中创建test数据库,和相应的site数据表 二.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo4 三.进入 ...
- 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据
1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...
- Python 之scrapy框架58同城招聘爬取案例
一.项目目录结构: 代码如下: # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See docu ...
- python爬虫 scrapy框架(一)爬取壁纸照片
此项目仅供学习参考, 不用于任何商业用途 若侵权留言,立刻删除 刚入门爬虫不久,一心想找个网站试试,然后朋友推荐了这个壁纸网站
- 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)
一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...
- 全栈爬取-Scrapy框架(CrawlSpider)
引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...
随机推荐
- SQL Server 怎么在分页获取数据的同时获取到总记录数
SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SE ...
- webpack 笔记
webpack.config.json entry:入口,可有多个 devtool:'inline-source-map' source map,遇到错误时,追踪到原文件,而不是编译后的文件 ...
- 4.2 explain 之 select_type
一.查询类型,主要用于区别 普通查询.联合查询.子查询等的复杂查询 二.常用常见的类型 1. simple : 简单的select查询,查询中不包含子查询或union 2. primary : 查询中 ...
- [转]Javascript实现图片的预加载详解
下面的函数实现了一个我们想要的最基本的图片预加载效果 function preloadimages(arr){ var newimages=[] var arr=(typeof arr!=" ...
- 2018-11-06 Visual Studio Code插件-英汉词典初版发布
VS插件市场地址: 英汉词典 - Visual Studio Marketplace 开源在: program-in-chinese/vscode_english_chinese_dictionary ...
- JDCP连接池连接数据库报错:java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
完整报错是这样的: 小编的情况: 使用mysql的jar包版本: 使用的jdcp的相关jar包版本: 报错的原因: mysql的jar包版本过低. 更新到最新版mysql的jar包即可. 小编更新后的 ...
- Android 组件的三种点击事件写法
一.准备工作 1.项目结构 2.布局文件(activity_main.xml) <?xml version="1.0" encoding="utf-8"? ...
- Okhttp3请求网络开启Gzip压缩
前沿 首先OkHttp3是支持Gzip解压缩的,不过我们要明白,它是支持我们在发起请求的时候自动加入header,Accept-Encoding: gzip,而我们的服务器返回的时候header中有C ...
- Verilog实现模长等于六十的二进制编码计数器
注释都加上了 由于参考网上的代码,其实现了置数 ,使能等功能,一并加上了 编译结果能通过 百度网盘文件下载:https://pan.baidu.com/s/1IVTD19NRk-s2dKBXtATkA ...
- Linux 之父自传《just for fun》读书笔记
一次偶然的机会,看到了阮一峰老师关于这本书的介绍,当时我就觉得这本书相当有趣. 在没有读这本书之前,我觉得 linus 作为发明 Linux 系统的人,应该是一个比较严肃的人,就像我的老师一样.但事实 ...