首页 > 其他分享 >关于 scrapy 查询元素时 获取结果为 None 的解决办法

关于 scrapy 查询元素时 获取结果为 None 的解决办法

时间:2024-12-26 16:58:51浏览次数:3  
标签:解决办法 None title text scrapy titles stars div response

class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["movie.douban.com"]
    start_urls = ["https://movie.douban.com/chart"]

    def parse(self, response):
        titles = response.css('#content > div > div.article > div > div > table:nth-child(2) > tbody > tr > td:nth-child(2) > div > a::text').extract_first()
        stars = response.css('#content > div > div.article > div > div > table:nth-child(2) > tbody > tr > td:nth-child(2) > div > div > span.rating_nums::text').extract_first()
        print(f'title: {titles}, star: {stars}')
        titles = response.xpath('//tbody/tr/td[2]/div/a/text()').extract_first()
        stars = response.xpath('//tbody/tr/td[2]/div/div/span[2]/text()').extract_first()
        print(f'title: {titles}, star: {stars}')

上面是使用 scrapy 框架爬取豆瓣电影的一个代码片段,从中可以知道我使用了 css 和 xpath 两种数据提取方法去提取元素,但这两种元素都有一个特点那就是:他们都是我从浏览器上直接右键复制得到的。起初认为没毛病,运行后才发现:

两者都没有起到作用,于是我再次返回浏览器使用XPath插件验证, 发现如下:

确实获取到了, 一阵莫名其妙,于是我不用浏览器复制得到的结果,直接自己去模拟推导一下xpath路径,结果如下:

将xpath粘贴到代码中:

    def parse(self, response):
        titles = response.xpath('//div[@class="pl2"]/a/text()').getall()
        stars = response.xpath('//span[@class="rating_nums"]/text()').getall()
        titles = [title.strip()[:-1].strip() for title in titles if title.strip()]
        #print(f'titles.len: {len(titles)}, stars.len: {len(stars)}')

        for title , star in zip(titles, stars):
            print(f'title: {title}, star: {star}')

 运行得到如图,成功。。。

 经过这次教训,直接就让我放弃了靠浏览器吃饭的想法,还是得自身实力硬,浏览器只能起到辅助作用。

下面解释原因:

经过打印抓取到的 HTML 源代码可知: print(response.text)

源码的结构和实际上F12得到的结构是有出入的,部分元素可能是通过 JavaScript 动态加载的,

而//tbody/tr/td[2]/div/a/text() 是一个更具体的 XPath,如果页面结构稍有变化,它可能就会失效,而 //div[@class="pl2"]/a/text() 更通用,容错性更强。

标签:解决办法,None,title,text,scrapy,titles,stars,div,response
From: https://blog.csdn.net/m0_74091159/article/details/144741618

相关文章

  • Scrapy:settings对象核心类BaseSettings详解
    Settings概述文件路径:scrapy/settings/init.pyscrapy/settings/default_settings.pyscrapy/settings这个文件夹中有两个文件。在__init__.py文件中定义了scrapy中的设置对象的核心类。default_settings.py文件中定义了scrapy所有的默认配置,这个就是记录scrapy默认配置的......
  • Springboot Cache @Cacheable 类内部调用时不生效,解决办法
    SpringbootCache@Cacheable类内部调用时不生效,解决办法|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|......
  • Maven导入依赖过程中下载极其慢导致下载失败的解决办法
    首先右键打开Maven像这样-——————》然后点击opensettings.xml如果之前没有这个文件那么这里会显示“createsettings.xml”直接点就好了新建之后直接到这个文件里面去在这个文件里面添加上镜像就行了,阿里云的镜像非常好用,在哪里都好用,尤其是在下载破python库的时候嘎嘎......
  • VMware虚拟机桥接模式ping时出现“DUP!“---较全方位解决办法
    虽然此时还有很多期末大作业、课设、报告、复习等着我......但是还是想记录下,因为被这个问题卡了两个小时!!!在搜寻无数网页后,尝试过的方法如下:将Host的“VMwareNetwork Adapter VMnet8”虚拟网卡,先禁用,再启用。禁用RoutingandRemoteAccess服务。清空/etc/udev/rule......
  • .net framework 4.7.2 框架winform项目升级到.net 8.0项目 log4net不起作用的解决办法
    问题描述:在.netframework4.7.2框架中的winform项目,引入log4net作为日志组件使用,一切正常,可以正常输出日志。但项目框架升级到.net8.0后,log4net的使用就报错,虽然网上有很多关于.net8.0配置并使用log4net的方法,但有些我尝试没有用,有些代码所在位置看不懂在哪用。最后,我想到了......
  • 运维系列&前端系列:echarts超出容器宽度问题的解决办法
    echarts超出容器宽度问题的解决办法echarts超出容器宽度问题的解决办法问题:解决方法:echarts超出容器宽度问题的解决办法问题:在使用vue+iview+echarts时,出现了echarts图标刷新页面会超出容器宽度的问题,效果如下:DOM结构:JS代码:解决方法:在网上查找了很多方......
  • dedeCMS 图集提示302与FILEID:X解决办法
    问题:图集提示302与FILEID:X。解决办法:打开 /dede/swfupload.php 文件,找到 echo"FILEID:".$_SESSION['fileid'];,在其上面加入:ob_end_clean();继续找到 if(empty($id)),在其上面加入:ob_end_clean();将最近改动过的文件用编程软件查看和转码回UTF-8无BOM......
  • windows 启动时弹出【选择操作系统】的解决办法
    原因因为台式机重装,原来的旧硬盘没拔,插上新硬盘后电脑有两个硬盘,开机时识别到有两个系统所以出现上述情况,新硬盘的分区方式中,引导分区记录了这个双系统信息解决办法win+R进入运行界面输入MSConfig,点击回车,进入启动设置上点击“引导”,可以看到有两个启动盘,把多余那个......
  • d3dcompiler_42.dll未被指定在Windows运行,代码0xc0000020或0xc000012f解决办法
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......
  • d3dcompiler_41.dll未被指定在Windows运行,代码0xc0000020或0xc000012f解决办法
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......