用xpath来爬取网页

标题常见爬取网页时,提取数据的方法有xpath,正则提取,对于json数据使用功能jsonpath进行提取,在scrapy使用css进行提取。

标题在这众多提取方法中这次使用xpath进行模拟我们所面对的数据,进行一般和特殊的数据提取。

网址:https://www.xiazaiba.com/android/app/
文章以该网站进行xpath提取数据。

、对于简单的数据来说,可以直接通过检查网页源码,之后进行copy其xpath的路径(提示:7、8成网页可以这样直接提取到)

  1. 第一步:鼠标右键,检查网页,也可以快捷键F12

在这里插入图片描述

2.第二步:
点击你所想要的信息:点击后下面会自动跳到相应的位置,之后copy路径就可以
在这里插入图片描述
在这里插入图片描述
这个方法非常的快捷。准确度一般,毕竟还是自己写最准确。

墙裂推荐一个谷歌插件,xpath-helper这个插件可以实时的查看自己的xpath路径所对应的信息。
在这里插入图片描述
像这样是不是非常的nice
、对于特殊的要求,xpath进行应对

  1. 还是这个网站,我现在想,从所有之后的分类进行爬取,我不想要所有这个模块

这是就要用到xpath中的position(位置)方法,position是处理这种情况比较快的

/html/body/div/div[1]/div[6]/div/div[3]/div[1]/div[2]/a[1]/text()
这个xpath提取的是所有
/html/body/div/div[1]/div[6]/div/div[3]/div[1]/div[2]/a[position()>1]/text()
这个xpath提取的是所有之后的模块

使用方法:正如其意思所说,position(位置),我们只需要在递归的标签中换成该字段,就可以进行选择行的提取数据

  1. 对网页进行翻页,提取翻页的网址
    在这里插入图片描述
    在这里插入图片描述
    我们可以发现,网页的下一页的位置在发生在和变化,如果想要定位到它,不能使用常规的方法,因为每一页的位置都不一样。这是我们就要使用last()

/html/body/div/div[1]/div[8]/div/a[last()-1]/@href
像这样,很好理解,跟position差不多都是在递归的标签内进行修改,last()代表最后的一个标签,last()-1,代表倒数第二个标签,其余同理

  1. 还是翻页标签,还可以采用content()方法进行定位:
    /html/body/div/div[1]/div[8]/div/a[contains(string(.),‘下一页’)]/@href
    在这里插入图片描述

还有一些其他的方法,下回继续,有问题可留言,相互交流!!!

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Scrapy进行XPath翻页爬取网页的步骤如下: 1. 创建Scrapy项目 首先,我们需要创建一个Scrapy项目。可以在命令行中输入以下命令: ``` scrapy startproject project_name ``` 其中,`project_name`为项目名称。 2. 创建Spider 在项目的`spiders`文件夹中创建一个Spider,用于定义如何爬取网页。可以使用以下命令: ``` scrapy genspider spider_name domain.com ``` 其中,`spider_name`为Spider名称,`domain.com`为要爬取的域名。 在Spider中,我们需要定义如何提取数据。使用XPath可以方便地定位需要提取的数据。例如,如果我们想要提取网页中所有的标题,可以使用以下XPath表达式: ```python titles = response.xpath('//h1/text()').extract() ``` 其中,`response`为当前页面的响应对象。 3. 定义翻页规则 使用Scrapy,我们可以通过定义翻页规则实现自动翻页爬取网页。在Spider中,我们需要定义如何获取下一页的URL。可以使用以下代码: ```python next_page_url = response.xpath('//a[@class="next-page"]/@href') ``` 其中,`next-page`为下一页链接的类名,`@href`表示获取链接地址。 4. 发送翻页请求 在Spider中,我们可以通过`yield`语句发送请求获取下一页的数据。例如,下面的代码实现了自动翻页爬取网页的功能: ```python class MySpider(scrapy.Spider): name = "myspider" allowed_domains = ["example.com"] start_urls = ["http://www.example.com/page/1"] def parse(self, response): titles = response.xpath('//h1/text()').extract() for title in titles: yield {"title": title} next_page_url = response.xpath('//a[@class="next-page"]/@href') if next_page_url: yield scrapy.Request(next_page_url, callback=self.parse) ``` 在以上代码中,`callback=self.parse`表示在获取下一页数据后,再次调用`parse`方法进行数据提取。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值