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 item
    import 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 全站数据爬取的更多相关文章

  1. 基于Scrapt框架的全站数据爬取

    创建scrapy工程项目,除了爬虫文件中的代码需要略微修改,其他模块用法相同(如中间件,管道等): 爬虫文件代码流程 导入链接提取器 from scrapy.linkextractors import ...

  2. scrapy框架之CrawlSpider全站自动爬取

    全站数据爬取的方式 1.通过递归的方式进行深度和广度爬取全站数据,可参考相关博文(全站图片爬取),手动借助scrapy.Request模块发起请求. 2.对于一定规则网站的全站数据爬取,可以使用Cra ...

  3. scrapy框架基于CrawlSpider的全站数据爬取

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  4. python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL

    一.先在MySQL中创建test数据库,和相应的site数据表 二.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo4 三.进入 ...

  5. 爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据

    1. Scrapy对接Selenium Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态谊染的页面.在前面的博客中抓取Ja ...

  6. Python 之scrapy框架58同城招聘爬取案例

    一.项目目录结构: 代码如下: # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See docu ...

  7. python爬虫 scrapy框架(一)爬取壁纸照片

    此项目仅供学习参考, 不用于任何商业用途 若侵权留言,立刻删除 刚入门爬虫不久,一心想找个网站试试,然后朋友推荐了这个壁纸网站   

  8. 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)

    一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...

  9. 全栈爬取-Scrapy框架(CrawlSpider)

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

随机推荐

  1. SqlServer 技术点总结(持续更新)

    本文是用于记录自己平时遇到的一些SQL问题或知识点,以便以后自己查阅,会持续的更新,增加内容.发在博客园也可以和各位博友共同学习交流,如文中记录的有错误之处希望指出,谢谢. 一.用SQL语句调用作业 ...

  2. [PHP] 算法-数值的整数次方的PHP实现

    给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 1.指数的二进制表达10^6次方 可以表示10^110(二进制) 10^100 ...

  3. [android] 获取系统的联系人信息

    内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者. 找到/data/data/com.android.providers.contacts/contacts2.db ...

  4. Could not get JDBC connection

    想学习下JavaWeb,手头有2017年有活动的时候买的一本书,还是全彩的,应该很适合我这种菜鸟技术渣. 只可惜照着书搭建了一套Web环境,代码和db脚本都是拷贝的光盘里的,也反复检查了数据库的连接情 ...

  5. WPF Modern UI 主题更换原理

    WPF Modern UI 主题更换原理 一 . 如何更换主题? 二 . 代码分析 代码路径 : FirstFloor.ModernUI.App / Content / SettingsAppeara ...

  6. 【代码笔记】Web-JavaScript-JavaScript switch语句

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 腾讯的产品思维 VS 阿里的终局思维

    从成立到借壳上市,有赞用了5年多时间.这期间,它有好几次机会死掉,有很多的理由活不到今天,白鸦曾经说,每一次度过难关最关键都是靠团队的力量.谢天谢地,它活了下来. 那么,这个在To B领域敢打敢拼的团 ...

  8. 吴恩达机器学习笔记 —— 19 应用举例:照片OCR(光学字符识别)

    http://www.cnblogs.com/xing901022/p/9374258.html 本章讲述的是一个复杂的机器学习系统,通过它可以看到机器学习的系统是如何组装起来的:另外也说明了一个复杂 ...

  9. Mybatis 同时传入多个参数和对象

    流程 1,mapper 接口文件使用 @param 注解(一个参数就不用使用注解,多个参数要么使用注解,要么使用数组的方式取值) 2,mapper xml 文件使用 mapper 接口文件传参 pub ...

  10. iOS------Xcode 的clang 扫描器可以检测出所有的内存泄露吗

    在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原 ...