Scrapy框架——CrawlSpider爬取某热线网站

CrawlSpider

Scrapy框架中分两类爬虫,Spider类和CrawlSpider类。

它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,

而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。

创建项目指令:

scrapy startproject sumPro

CrawlSpider创建:

scrapy genspider -t crawl sun "http://wz.sun0769.com"

LinkExtractor 链接提取器

根据指定规则进行指定链接的提取

from scrapy.linkextractors import LinkExtractor
LinkExtractor(allow=r‘start=\d+‘)
通过实例化LinkExtractor提取链接

主要参数

allow:满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

deny:与这个正则表达式(或正则表达式列表)不匹配的URL一定不提取。

rules 规则解析器

将链接提取器提取到的链接进行指定规则(callback)解析操作

Rule(LinkExtractor(allow=r‘start=\d+‘), callback=‘parse_tencent‘, follow=True),
在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了特定操作。

如果多个rule匹配了相同的链接,则根据规则在本集合中被定义的顺序,第一个会被使用

主要参数

复制代码
link_extractor:是一个Link Extractor对象,用于定义需要提取的链接
callback: 从link_extractor中每获取到链接时,参数所指定的值作为回调函数,该回调函数接受一个response作为其第一个参数。

注意:当编写爬虫规则时,避免使用parse作为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。

follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果callback为None,follow 默认设置为True ,否则默认为False。

使用CrawlSpider爬取信息

spider文件

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunPro.items import SunproItem,DetailproItem

# 爬取sun网站中的编号,标题,内容
class SunSpider(CrawlSpider):
    name = ‘sun‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘http://wz.sun0769.com/political/index/politicsNewest?id=1&page=1‘]

    link = LinkExtractor(allow=r‘id=1&page=\d+‘)  # 标题链接提取器 根据指定规则(allow)指定提取
    # http://wz.sun0769.com/political/politics/index?id = 449762
    link_detail = LinkExtractor(allow=r‘/politics/index\?id=\d+‘)  # 详情页链接提取器 根据指定规则(allow)指定提取
    rules = (
        # 规则解析器 :将链接提取器提取到的链接进行指定规则(callback)解析操作
        Rule(link, callback=‘parse_item‘, follow=True),
        # follow=True 链接提取器 循环提取

        Rule(link_detail, callback=‘parse_detail‘)
    )

    def parse_item(self, response):
        news_list = response.xpath(‘//ul[@class="title-state-ul"]/li‘)
        for new_item in news_list:
            new_num = new_item.xpath(‘./span[@class="state1"]/text()‘).extract_first()
            new_title = new_item.xpath(‘./span[@class="state3"]/a/text()‘).extract_first()
            item = SunproItem()
            item[‘new_num‘] = new_num
            item[‘new_title‘] = new_title

            # print(‘new_title:{}‘.format(new_title))
            yield item

    def parse_detail(self, response):
        """
         新闻内容
        :param response:
        :return:
        """
        # print(‘parse_detail:‘, response)
        detail_item = DetailproItem()
        news_content = response.xpath(‘//div[@class="details-box"]/pre/text()‘).extract_first()
        detail_item[‘new_content‘] = news_content
        # print(‘new_content:{}‘.format(news_content))

        yield detail_item

item文件

import scrapy

class SunproItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    new_num = scrapy.Field()
    new_title = scrapy.Field()
    pass

class DetailproItem(scrapy.Item):
    new_content = scrapy.Field()

pipeline文件

# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
from sunPro.items import SunproItem,DetailproItem

class SunproPipeline(object):
    def process_item(self, item, spider):
        if isinstance(item,DetailproItem):
            print(‘DetailproItem:{}‘.format(item[‘new_content‘]))
        else:
            print(‘SunproItem:{}:{}‘.format(item[‘new_num‘],item[‘new_title‘]))
        return item

原文地址:https://www.cnblogs.com/xiao-apple36/p/12640260.html

时间: 2024-09-30 10:09:17

Scrapy框架——CrawlSpider爬取某热线网站的相关文章

scrapy框架来爬取壁纸网站并将图片下载到本地文件中

首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() # 图集的标题 title = scrapy.Field() # 图片的url,需要来进行图片的抓取 url = scrapy.Field() pass 在确定完要爬的字段之后,就是分析网站页面的请求

scrapy爬虫框架(四)-爬取多个网页

scrapy爬虫框架(四) 爬取多个网页 思路:通过判断句子控网站中,下一页是否还有a标签来获取网址,拼接后继续爬取,最终写入json文件中. juziSpider.py # -*- coding: utf-8 -*- import scrapy from juzi.items import JuziItem class JuzispiderSpider(scrapy.Spider): name = 'juziSpider' allowed_domains = ['www.juzikong.co

scrapy爬取西刺网站ip

# scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class XicispiderSpider(scrapy.Spider): name = "xicispider" allowed_domains = ["www.xicidaili.com/nn"] start_urls = ['http://www.xicidaili.com/nn/']

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

使用node爬虫,爬取指定排名网站的JS引用库

前期准备 本爬虫将从网站爬取排名前几的网站,具体前几名可以具体设置,并分别爬取他们的主页,检查是否引用特定库. github地址 所用到的node主要模块 express 不用多说 request http模块 cheerio 运行在服务器端的jQuery node-inspector node调试模块 node-dev 修改文件后自动重启app 关于调试Node 在任意一个文件夹,执行node-inspector,通过打开特定页面,在页面上进行调试,然后运行app,使用node-dev app

Scrapy框架——使用CrawlSpider爬取数据

引言 本篇介绍Crawlspider,相比于Spider,Crawlspider更适用于批量爬取网页 Crawlspider Crawlspider适用于对网站爬取批量网页,相对比Spider类,CrawSpider主要使用规则(rules)来提取链接,通过定义一组规则为跟踪链接提供了遍历的机制. Crawlspider 的强大体现在自动爬取页面所有符合规则的链接并深入下去! 全站数据爬取 编码流程 新建一个工程 cd 工程 创建爬虫文件: scrapy genspider -t crawl s

python 使用scrapy框架爬取一个图书网站的信息

1.新建项目 scrapy start_project book_project 2.编写items类 3.编写spider类 # -*- coding: utf-8 -*- import scrapy from book_project.items import BookItem class BookInfoSpider(scrapy.Spider): name = "bookinfo"#定义爬虫的名字 allowed_domains = ["allitebooks.com

Scrapy实战:爬取http://quotes.toscrape.com网站数据

需要学习的地方: 1.Scrapy框架流程梳理,各文件的用途等 2.在Scrapy框架中使用MongoDB数据库存储数据 3.提取下一页链接,回调自身函数再次获取数据 站点:http://quotes.toscrape.com 该站点网页结构比较简单,需要的数据都在div标签中 操作步骤: 1.创建项目 # scrapy startproject quotetutorial 此时目录结构如下: 2.生成爬虫文件 # cd quotetutorial# scrapy genspider quote

初学scrapy之爬取wooyun.org网站

刚开始学习python,对于在网上爬取数据,还处于死搬硬套代码的阶段.不废话,直接开始我的第一个爬取之旅. 1.创建项目 1)创建项目命令 scrapy startproject wooyun 该命令会在当前目录下创建一个wooyun文件夹 2)定义items.py Scrapy提供了Item类,用来保存从页面爬取的数据.有点类似于Java中的反序列化,只不过反序列化是将字节流转化为Java对象,而Item是一个通用的类,通过key/value的形式存取数据.Item类中的所有字段通过 scra