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方法). 方法 ...
随机推荐
- 菜鸟入门【ASP.NET Core】14:MVC开发:UI、 EF + Identity实现、注册实现、登陆实现
前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改. MvcCookieAuthSample项目地址 ...
- [android] sharedPreference入门
/********************2016年5月6日 更新**************************************/ 知乎:Android 如何实现判断用户首次使用,比如首 ...
- Java 学习笔记 泛型
泛型 上界匹配 ? extends Number 下界匹配 ? super Number getSimpleName 不包括包名 getName 会包括包名 常和反射联合使用,做框架 Type是一个标 ...
- python同步、互斥锁、死锁
目录 同步 同步的概念 解决线程同时修改全局变量的方式 互斥锁 使用互斥锁完成2个线程对同一个全局变量各加9999999 次的操作 上锁解锁过程 总结 死锁 避免死锁 同步 同步的概念 同步就是协同步 ...
- JavaScript 笔记(一)
Number 1.2345e3=1.2345*1000 NaN//not a num 无法计算结果 Infinity //无限大 数组 var arr=[1,2,'hello'] 下标从0开始 对象 ...
- react学习(三)之生命周期/refs/受控组件 篇
挂载/卸载 //在类组件中 class Clock extends React.Component { constructor(props) { super(props); this.state = ...
- BZOJ 2463: [中山市选2009]谁能赢呢?(智商)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3110 Solved: 2250[Submit][Status][Discuss] Descript ...
- BZOJ1101: [POI2007]Zap(莫比乌斯反演)
1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2951 Solved: 1293[Submit][Status ...
- 2018-08-16 中文代码之Spring Boot添加基本日志
之前中文代码之Spring Boot实现简单REST服务的演示服务不知为何中止. 新开issue: 演示服务中止 · Issue #2 · program-in-chinese/programming ...
- TS学习随笔(二)->类型推论,联合类型
这篇内容指南: -----类型推论 -----联合类型 类型推论 第一篇中我们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那我们可不可以不加呢,这个嘛 ...