我正在使用scrapy从this网站抓取数据,但是在从具有相同类名的div中抓取内容时遇到了问题。
<div class="list">
<a id="followed_by" name="followed_by"></a>
<h4 class="li_group">Followed by</h4>
<div class="soda odd"><a href="http://www.imdb.com/title/tt0094450">Dirty Dancing</a></div>
<div class="soda even"><a href="http://www.imdb.com/title/tt0338096">Dirty Dancing: Havana Nights</a></div>
<a id="version_of" name="version_of"></a>
<h4 class="li_group">Version of</h4>
<div class="soda odd"><a href="http://www.imdb.com/title/tt5262792">Dirty Dancing</a></div>
<a id="remade_as" name="remade_as"></a>
<h4 class="li_group">Remade as</h4>
<div class="soda odd"><a href="http://www.imdb.com/title/tt0461062">Holiday</a></div>
</div>
我尝试使用 xpath ,但是当我试图从多个页面中搜索时,我很难过。例如,当我试图从this抓取时,我用于第一页的xpath不起作用。
这是我试过的代码:
class ImdbSpider(scrapy.Spider):
name = "IMDB"
allowed_domains = ["http://www.imdb.com"]
start_urls = [l.strip() for l in open('1988.txt').readlines()]
def parse(self, response):
filename = response.url.split("/")[-2]
open(filename, 'wb').write(response.body)
item = ImdbcoItem
for sel in response.xpath('body'):
item['Followed_by'] = sel.xpath('//*[@id="connections_content"]/div[2]/div[1]/a/text()').extract()
item['version_of'] = sel.xpath('//*[@id="connections_content"]/div[2]/div[3]/a/text()').extract()
item['Remade_as'] = sel.xpath('//*[@id="connections_content"]/div[2]/div[4]/a/text()').extract()
return item
我希望输出是这样的:
其次是:肮脏的舞蹈,肮脏的舞蹈:哈瓦那之夜
版本:Dirty Dancing
重新制作:假日
任何帮助都会真的有用!!
答案 0 :(得分:0)
这可能会有所帮助
desc = hxs.select('//div[@class = "list"]/text()').extract()
and then try print(desc[0])
答案 1 :(得分:0)
试一试。我希望它能解决这个问题:
for sel in response.css("div.list"):
item['Followed_by'] = sel.css("a#followed_by+h4.li_group+div.odd a::text").extract()
item['version_of'] = sel.css("a#version_of+h4.li_group+div.odd a::text").extract()
item['Remade_as'] = sel.css("a#remade_as+h4.li_group+div.odd a::text").extract()
return item
如果“Followed by”未能提供所有结果,请尝试:
item['Followed_by'] = sel.css("a#followed_by+h4.li_group+div.odd a::text , a#followed_by+h4.li_group+div.odd+div.even a::text").extract()