python网络爬虫 CrawlSpider使用详解


Posted in Python onSeptember 27, 2019

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 相关文章推荐
python写的一个文本编辑器
Jan 23 Python
用python代码做configure文件
Jul 20 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
Python中用max()方法求最大值的介绍
May 15 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
Python 读写文件的操作代码
Sep 20 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
python numpy存取文件的方式
Apr 01 #Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 #Python
使用Fabric自动化部署Django项目的实现
Sep 27 #Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 #Python
opencv调整图像亮度对比度的示例代码
Sep 27 #Python
详解Django将秒转换为xx天xx时xx分
Sep 27 #Python
pytorch多GPU并行运算的实现
Sep 27 #Python
You might like
PHP的FTP学习(三)
2006/10/09 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
python版简单工厂模式
2017/10/16 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
快速了解python leveldb
2018/01/18 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
django跳转页面传参的实现
2020/09/17 Python
python cookie反爬处理的实现
2020/11/01 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
学校联谊活动方案
2014/02/15 职场文书
关于学习的演讲稿
2014/05/10 职场文书
求职自我推荐信
2014/06/25 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers