Python中文
首页
教程
问答
标签
搜索
登录
注册
对于错误地放置在<h>标记中的<p>元素,正确的Scrapy XPath是什么?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在设置我的第一个Scrapy Spider,使用xpath提取某些元素时遇到了一些困难。你知道吗</p> <p>我的目标是<a href="http://www.cbooo.cn/m/641515" rel="nofollow noreferrer">http://www.cbooo.cn/m/641515</a>(一个类似于票房魔咒的中文网站)。我可以毫无问题地提取电影的中文名称,但我不知道如何获取下面的信息。我相信这是因为HTML不是标准的,正如前面所讨论的<a href="https://stackoverflow.com/questions/44356281/extracting-p-within-h1-with-python-scrapy">here</a>。标题下嵌套了几个段落元素。你知道吗</p> <p>我在上面的链接中尝试了这个解决方案,也<a href="https://stackoverflow.com/questions/41063971/behavior-of-the-scrapy-xpath-selector-on-h1-h6-tags?noredirect=1&lq=1">here</a>,但没有效果。你知道吗</p> <pre><code>def parse(self, response): chinesetitle = response.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[1]/h2/text()').extract() englishtitle = response.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[1]/h2/p').extract() chinesereleasedate = response.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[1]/p[4]').extract() productionregions = response.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[1]/p[6]').extract() chineseboxoffice = response.xpath('//*[@id="top"]/div[3]/div[2]/div/div[1]/div[2]/div[1]/p[1]/span/text()[2]').extract() yield { 'chinesetitle': chinesetitle, 'englishtitle': englishtitle, 'chinesereleasedate': chinesereleasedate, 'productionregions': productionregions, 'chineseboxoffice': chineseboxoffice } </code></pre> <p>当我在粘壳中运行蜘蛛时,蜘蛛会像预期的那样找到中文标题。但是,其余的项返回一个[],或者页面上的一堆奇怪的文本。你知道吗</p> <p>有什么建议吗?这是我的第一个业余编程项目,所以我感谢你对我的无知和帮助的耐心。谢谢您!你知道吗</p> <p><strong>编辑</p> <p>尝试在注释中实现文本清理方法。评论中的例子是有效的,但是当我试图重新实现它时,我得到了一个“Attribute Error:'list'object has no Attribute'split'”(请参阅下面的中国票房、原产国和流派示例)</p> <pre><code>def parse(self, response): chinesetitle = response.css('.cont h2::text').extract_first() englishtitle = response.css('.cont h2 + p::text').extract_first() chinaboxoffice = response.xpath('//span[@class="m-span"]/text()[2]').extract_first() chinaboxoffice = chinaboxoffice.split('万')[0] chinareleasedate = response.xpath('//div[@class="ziliaofr"]/div/p[contains(text(),"上映时间")]/text()').extract_first() chinareleasedate = chinareleasedate.split(':')[1].split('(')[0] countryoforigin = response.xpath('//div[@class="ziliaofr"]/div/p')[6].xpath('text()').extract_first() countryoforigin = countryoforigin.split(':')[1] genre = response.xpath('//div[@class="ziliaofr"]/div/p[contains(text(),"类型")]/text()').extract_first() genre = genre.split(':')[1] director = response.xpath('//*[@id="tabcont1"]/dl/dd[1]/p/a/text()').extract() </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您不必用xpath折磨自己,顺便说一下,您可以使用css:</p> <pre><code>response.css('.cont h2::text').extract_first() # '战狼2' response.css('.cont h2 + p::text').extract_first() # 'Wolf Warriors 2' </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
5 回答
如何添加表示整数的擦边字符串?
1 回答
如何添加要在Bokeh中使用的新font.ttf文件?
4 回答
如何添加要显示的矩阵XY轴编号和XY轴
2 回答
如何添加计数?
9 回答
如何添加计数器函数?
4 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
5 回答
如何添加计数器来跟踪while循环中的月份和年份?
3 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
1 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
6 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
9 回答
如何添加评论拉梅尔亚姆
5 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
6 回答
如何添加谷歌地点自动完成到Flask?
4 回答
如何添加超时、python discord bot
8 回答
如何添加超过1dp的检查
1 回答
如何添加距离方法
9 回答
如何添加跟随游戏的敌人精灵
9 回答
如何添加路径以便python可以找到程序?
2 回答
如何添加身份验证/安全性以使用happybase访问HBase?
1 回答