(八)Scrapy框架(三) ?python+scrapy爬虫5小时入门

Scrapy框架(三)

CrawlSpider

创建CrawlSpider

命令:
scrapy genspider -t crawl hr.tencent hr.tencent.com
url 就是你想要爬取的网址
注意:分析本地文件是一定要带上路径,scrapy shell默认当作url

Rule
Rule用来定义CrawlSpider的爬取规则
参数:
link_extractor  Link Extractor对象,它定义如何从每个已爬网页面中提取链接。
callback  回调函数
cb_kwargs  是一个包含要传递给回调函数的关键字参数的dict
follow 它指定是否应该从使用此规则提取的每个响应中跟踪链接。
process_links  用于过滤连接的回调函数
process_request  用于过滤请求的额回调函数

LinkExtractor
LinkExractor也是scrapy框架定义的一个类它唯一的目的是从web页面中提取最终将被跟踪的额连接。

我们也可定义我们自己的链接提取器,只需要提供一个名为extract_links的方法,它接收Response对象并返回scrapy.link.Link对象列表。

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class MeishiSpider(CrawlSpider):
    """
    scrapy 爬静态的
    CrawlSpider 在多页情况下, 已经数据为纯静态的情况 用来爬取全站数据.
    Spider
    """
    name = 'meishi'
    allowed_domains = ['www.meishij.net']
    start_urls = ['https://www.meishij.net/chufang/diy/?&page=1']

    rules = (
        # allow: 指定正则匹配的唯一标准, 不用把正则表达式写完整, 只要能体现唯一性且在网页源代码中匹配到的数据就是目标数据
        # 这里的page=\d+ 虽然表示不能代表整个翻页的URL, 但是没关系, LinkExtractor会帮我们找到匹配项并直接获取其完整URL
        # callback: Rule规则发送的后续请求, 所返回的响应应该交给谁(方法名)来进行处理
        # callback不能写parse, parse会在CrawlSpider自己调用.
        # follow: 首先项目开始运行后, 发送的第一批请求会被Rule进行规则检查, 若在响应的数据中匹配到相关URL, 那么就会跟进(发送)该URL
        # 但是跟进的请求也会有响应, 响应中也可能会包含符合allow表达式匹配的URL. 如果想要进一步匹配这些URL并跟进, 就设置follow=True,
        # 如果不想跟进就设置为False

        # 前面Rule发送的请求返回的响应, 会被下面的Rule也就进行匹配, 所以若你Rule设置太多. 逻辑复杂容易出问题
        # 1. 该Rule是匹配响应中的页码URL, 匹配到了就跟进请求, 若跟进的响应中也包含了页码URL, 那么就再跟进(重复的URL会自动去重)
        # 直到没有匹配新的URL为止
        Rule(LinkExtractor(allow=r'page=\d+'), callback='parse_item', follow=True),
        # 2. 该Rule是匹配每一页菜品的详情URL, 匹配到就跟进, 跟进返回的响应交给parse_detail
        Rule(LinkExtractor(allow=r'zuofa/'), callback='parse_detail', follow=False),
    )

    def parse_item(self, response):
        """
        获取每页的菜品基本信息
        :param response:
        :return:
        """
        # PameishiItem 该类描述的目标字段是菜品基本信息
        item = PameishiItem()
        node_list = response.xpath("//div[@class='listtyle1']")

        for node in node_list:
            item["title"] = node.xpath("./a/@title").extract_first()
            item["title_url"] = node.xpath("./a/@href").extract_first()
            item["title_img_url"] = node.xpath("./a/img/@src").extract_first()
            item["use_time"] = node.xpath(".//ul/li[1]/text()").extract_first()
            item["pattern_flavor"] = node.xpath(".//ul/li[2]/text()").extract_first()

            yield item

案例实践

piplines文件

1560431483911.png
1560431511676.png

CrawlSpider页面去重

1560431542255.png

scrapy去重机制

1560431570470.png
总结:
scrapy只会将请求报文完全相同的对象视为相同请求.
对这样的相同请求对象进行过滤, 过滤原理大致为: 将请求的对象的相关信息, 如url, headers, 参数数据等.
通过单向加密加密成等长数据, 然后对加密后的数据进行对比, 来实现去重.
1560431603728.png

作业

1.使用CrawlSpider实现爬取美食网站上的相关信息,并导出为两个json数据文件, 分为基本信息json, 详情信息json.
要求:运行成功为前提,只要spider代码的截图和两个文件部分信息截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351