Scrapy爬虫框架进行数据解析 使用Scrapy内建的Xpath进行数据解析

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Scrapy爬虫框架进行数据解析 使用Scrapy内建的Xpath进行数据解析

按照前面几篇文章的做法,创建scrapy工程,进入到spiders文件夹中创建爬虫,然后修改settings.py文件,让它不遵从robots协议并更换UA,指定日志等级为error:

USER_AGENT = 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
ROBOTSTXT_OBEY = False
LOG_LEVEL='ERROR' 

爬虫文件还是跟前面的一样,不过这里需要进行数据解析:

# -*- coding: utf-8 -*-
import scrapy
class MeiziSpider(scrapy.Spider):
    name = 'meizi'
    allowed_domains = ['www.linuxcool.com']
    start_urls = ['https://www.linuxcool.com/']
    def parse(self, response):
        # 数据解析: 某网站中文章标题、url
        # response.xpath()
        # tree.xpath()
        # 上述两个xpath不是同一个方法,但是使用上基本相同,只有细微差别
        ul_list=response.xpath('//ul[@class="category-posts"]/li')
        for li in ul_list:
            href=li.xpath('./a/@href')
            title=li.xpath('./a/text()')
            print(href,title)

我们借助etree中的xpath语法进行数据提取,运行爬虫你会发现,输出的不是字符串,而是一个Selector对象,且提取的字符串数据被存储在了该对象的data中去,这里需要通过extract方法来提取字符串数据:

# -*- coding: utf-8 -*-
import scrapy
class MeiziSpider(scrapy.Spider):
    name = 'meizi'
    allowed_domains = ['www.linuxcool.com']
    start_urls = ['https://www.linuxcool.com/']
    def parse(self, response):
        ul_list=response.xpath('//ul[@class="category-posts"]/li')
        for li in ul_list:
            # extract() 将列表中的每一个列表元素表示的Selector对象中的字符串取出
            href=li.xpath('./a/@href').extract()
            # extract()表示将列表中的第0个列表元素进行数据提取
            title=li.xpath('./a/text()').extract_first()
            print(href,title)

这里需要注意extract()和extract_first()的区别,当提取的数据存在多个的时候可以使用extract(),当提取的数据只有一个的时候可以使用extract_first(),需要你自己取判别。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Scrapy爬虫框架进行数据解析 使用Scrapy内建的Xpath进行数据解析》 发布于2020-05-09

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

9 + 7 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册