我正在设置我的第一个Scrapy Spider,使用xpath提取某些元素时遇到了一些困难。你知道吗
我的目标是http://www.cbooo.cn/m/641515(一个类似于票房魔咒的中文网站)。我可以毫无问题地提取电影的中文名称,但我不知道如何获取下面的信息。我相信这是因为HTML不是标准的,正如前面所讨论的here。标题下嵌套了几个段落元素。你知道吗
我在上面的链接中尝试了这个解决方案,也here,但没有效果。你知道吗
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
}
当我在粘壳中运行蜘蛛时,蜘蛛会像预期的那样找到中文标题。但是,其余的项返回一个[],或者页面上的一堆奇怪的文本。你知道吗
有什么建议吗?这是我的第一个业余编程项目,所以我感谢你对我的无知和帮助的耐心。谢谢您!你知道吗
编辑
尝试在注释中实现文本清理方法。评论中的例子是有效的,但是当我试图重新实现它时,我得到了一个“Attribute Error:'list'object has no Attribute'split'”(请参阅下面的中国票房、原产国和流派示例)
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()
这里有一些例子,你可以从中推断出最后一个。记住总是使用class或id属性来标识html元素。
/div[3]/div[2]/div/div[1]/..
不是一个好的做法。你知道吗为了找到
chinesereleasedate
,我使用了文本包含'上映时间'
的p
元素。你必须解析它才能得到准确的值。你知道吗为了找到
productionregions
,我从列表中选择了第7个选择器response.xpath('//div[@class="ziliaofr"]/div/p')[6]
选择了文本。一个更好的方法是检查文本是否包含如上所述的'。你知道吗编辑:回答评论中的问题
返回一个类似
'\r\n 上映时间:2017-7-27(中国)\r\n '
的字符串,它不是您要查找的字符串。你可以像这样清理它:chinesereleasedate = chinesereleasedate.split(':')[1].split('(')[0]
这给了我们正确的日期。你知道吗
您不必用xpath折磨自己,顺便说一下,您可以使用css:
相关问题 更多 >
编程相关推荐