scrapy由浅入深(三) selenium模拟爬取ajax动态页面(智联招聘)

本文介绍了使用Scrapy结合Selenium爬取智联招聘动态页面的过程,包括解决网页源码中class属性被替换、AJAX加载职位列表、数据丢失等问题,以及设置中间件和数据库保存数据的策略。
摘要由CSDN通过智能技术生成

爬取智联招聘的网址:https://sou.zhaopin.com/?pageSize=60&jl=489&kw=python&kt=3

        上一篇博客爬取了前程无忧的职位招聘信息,总体来说前程无忧的网站信息并不难爬取,前程无忧的网站并没有ajax,直接请求网站就能获得职位信息,但是智联招聘的页面涉及到ajax,直接get网站的url获取不到任何有用的信息,这也是反爬虫的一种手段,因此我们需要借助selenium模拟浏览器访问智联招聘网站。在爬取的过程中有一些非常有意思的问题,下面我会把这些问题以及解决的办法一一列举出来。

        1.首先我在分析职位详情(注意不是职位列表页面)网页的结构的时候遇到的一个问题,在分析网页的源码构造xpath的时候,发现无论怎么修改xpath及css选择器,获得的数据都是空([ ])。原来使用爬虫获取到的网页源码与我们在网页上看到的源码不一样,使用scrapy请求网站的时候,网页会将class属性替换掉,所以直接通过网页上的源码来构造xpath和css选择器是不可行的。正确的做法是通过scrapy shell +""(请求的网址),打开浏览器查看正确的class属性,然后再构造xpath及css选择器。2.然后就是涉及到ajax的职位列表页面,细心一点的同学会发现当输入网址之后,下方的职位列表会加载一段时间才会展示出来,如果我们直接get网页的源码,不会得到任何有用的信息,使用scrapy shell + ""(职位列表页面) 可以看到在浏览器中不会显示查询之后的结果,因此我们需要使用selenium模拟获取职位列表页面的所有信息。3.编写使用selenium模拟点击下一页的中间件,职位的详细信息通过scrapy系统的中间件下载,这就会产生数据丢失的问题,因为点击下一页这个动作运行的非常快,那么在点击下一页之后,scrapy会接受该页面的所有职位链接,一个页面有60个职位链接,我试验的时候基本上当selenium中间件点击到将近30页的时候,第一页的所有职位链接才会爬取完,那么就有一个问题,现在scrapy已经接受了几百个职位的url,在请求这些url的时候很有可能会丢掉大部分的数据,造成很多页面没有爬取的漏洞,解决的办法也很简单,设置网页跳转的限制,当一个网页的数据爬取的差不多的时候,比如爬取了50多条数据的时候就能跳转到下一页。

        代码思路:1.定义一个中间件处理两种不同的请求,点击下一页或者下载详情页。2.抽取职位列表的所有url,通过scrapy系统的中间件请求职位的详细信息页,防止覆盖掉senium的职位列表的url。3.判断该职位列表页的数据爬取了多少条,如果超过50页,那么点击到下一页。4.将数据保存到数据库

一.创建项目

(1)

scrapy startproject zhipinSpider

创建一个名称为zhipinSpider的项目

(2)手动创建job_detail.py文件,实现爬虫的主要逻辑

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 ScrapySelenium 结合进行网页动态加载数据的爬取时,可以按照以下步骤进行操作: 1. 安装所需库:确保已安装 ScrapySelenium 库。可以使用以下命令进行安装: ``` pip install scrapy pip install selenium ``` 2. 创建 Scrapy 项目:使用以下命令创建一个新的 Scrapy 项目: ``` scrapy startproject dynamic_scraping ``` 3. 创建 Spider:进入项目目录,并使用以下命令创建一个新的 Spider: ``` cd dynamic_scraping scrapy genspider example example.com ``` 这将在 `spiders` 目录下创建一个名为 `example.py` 的 Spider。 4. 配置 Spider:打开 `example.py` 文件,并按照以下示例进行配置: ```python import scrapy from scrapy_selenium import SeleniumRequest from scrapy.selector import Selector class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] def start_requests(self): yield SeleniumRequest( url='https://example.com', callback=self.parse ) def parse(self, response): sel = Selector(response) # 在这里使用 XPath 或 CSS 选择器提取动态加载的数据 # 示例:提取标题 title = sel.xpath('//h1/text()').get() print(title) ``` 在上面的示例中,我们使用了 `SeleniumRequest` 替代了普通的 `scrapy.Request`,这使得 Scrapy 可以使用 Selenium 来处理动态加载的内容。 5. 配置 Selenium:为了使用 Selenium,你需要配置相关的 Web 驱动程序。根据你使用的浏览器,下载并安装相应的驱动程序,并将其添加到系统的 PATH 环境变量中。 6. 运行 Spider:使用以下命令运行 Spider: ``` scrapy crawl example ``` 这将启动爬取过程,并在控制台上打印出提取的动态加载数据。 通过以上步骤,你可以使用 ScrapySelenium 结合进行爬取动态加载数据的操作。你可以根据实际需求修改 Spider 中的代码来提取所需的数据,并将其保存到文件或数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值