• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

scrapy框架入门

武飞扬头像
qq_41281195
帮助2

scrapy框架入门(二)实现翻页请求并将数据存入mogodb

通过找一个招聘网站,爬取对应页面的信息同时学习实现翻页的方法


一、翻页是什么,如何实现?

爬虫作为获取数据的一种方法,对网址请求的时候,常常涉及翻页操作,今天我们来用scrapy实现翻页。
现在先假设我们创建了一个scrapy项目,并且可以获得第一页我们所需要的信息,现在需要实现翻页去获取其他页面的信息。
一般情况下,我们的思路是找到当前页面中下一页的按钮,点击进行翻页。在scrapy中,我们翻页需要把翻页的网址从spider中传递到调度器scheduler。所以我们的任务就在于如何从spider中拿到网址,包装成Request,通过引擎传递到scheduler。

二、实现步骤

1.引入库

先把代码发出来吧(示例):

class YnzppcSpider(scrapy.Spider):
    name = 'ynzppc'
    allowed_domains = ['ynzp.com']
    start_urls = ['https://www.ynzp.com/search/offer_search_result.aspx?jcity1Hidden=330000&page=1']
#数据爬取部分
    def parse(self, response):
        div_list = response.xpath('//div[@id="ListView"]/div')
        for div in div_list:
            item = {}
            item['title'] = div.xpath("./div[1]/a/text()").extract_first()
            #如何去除/n/r
            item['salary'] = div.xpath("./div[1]/div/text()").extract_first()
            item['company'] = div.xpath("./div[2]/a/text()").extract_first()
            yield item
        # pass
    #找到下一页的URL地址
        #发现爬取的数据比较少,查找后发现xpath有变化,后一页并不都是处于span[8]待解决
        #通过xpath去找页面中后一页的按钮,不同页面需要自己分析
        next_page_url = response.xpath('//*[@id="ctl00_ContentPlaceHolder1_PageControl"]/td[2]/div[1]/span[7]/a/@href').extract_first()
        if bool(next_page_url)==True:
            next_url = 'https://www.ynzp.com/search/' next_page_url
        #拿到网址后将其包装为Request对象,回调parse函数继续爬取,这里的前提是后一页爬取的数据和结构没有改变
        #若是后面一页的数据或者xpath发生了改变则需要重新定义新的parse1函数针对性的爬取
            yield scrapy.Request(
                next_url,
                callback=self.parse
            )
        print(next_page_url,'urlnext')
学新通

2.存储数据

代码如下(示例):

from pymongo import MongoClient
#实例化MongoClient
client = MongoClient()
#创建数据库中对应的信息
collection = client['ynzp']['job']

class YnzpPipeline:
    def process_item(self, item, spider):
    #在数据库中插入数据
        collection.insert(item)
        return item

学新通


存在的问题

实现的过程中发现的问题:

  1. 爬取的薪资存在/r/n等,如何去除这些修饰符
  2. 爬取网站的时候,发现数据没有想象中的多,检查发现是不同页面下一页对应的xpath存在差异,并不固定,如何实现动态绑定下一页是一个问题。
  3. 在爬取网站的时候,Obey robots.txt 经常导致报错,即网站不允许爬取部分数据,因此有些数据无法爬下来,如果非要爬取可以修改setting中ROBOTSTXT_OBEY = False。
    先埋个坑,后续跟进

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcecjj
系列文章
更多 icon
同类精品
更多 icon
继续加载