gpt4 book ai didi

python - 如何使用Scrapy采集页面不同部分的数据?

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:17 26 4
gpt4 key购买 nike

我有兴趣从类似 this 的页面中选择一些数据.我写了下面的脚本来做到这一点。问题是我选择了4个部分(crucible、titan、hunter、warlock),但是不同页面的数据位置不一样。我不确定我选择不同部分的方法是否合适。

 def parse_country(self, response):

hxs = scrapy.Selector(response)

crucibleSummary = hxs.xpath('//*[@id="site-body"]/div[5]/div/div/div[1]/div[4]/div[2]').xpath('.//text()').extract()
crucibleSummaryData = [e.replace(',', '').replace('%', '').replace('\n', '').replace('Top', '').
replace('#', '').replace('\r', '').replace('\n', '').strip()
for e in crucibleSummary]
crucibleSummaryData = filter(None, crucibleSummaryData)

titan = hxs.xpath('//*[@id="site-body"]/div[5]/div/div/div[2]/div[3]/div[2]').xpath('.//text()').extract()
titanData = [e.replace(',', '').replace('%', '').replace('\n', '').replace('Top', '').replace('#', '').
replace('\r', '').replace('\n', '').strip() for e in titan]
titanData = filter(None, titanData)

warlock = hxs.xpath('//*[@id="site-body"]/div[5]/div/div/div[2]/div[3]/div[3]').xpath('.//text()').extract()
warlockData = [e.replace(',', '').replace('%', '').replace('\n', '').replace('Top', '').replace('#', '').
replace('\r', '').replace('\n', '').strip() for e in warlock]
warlockData = filter(None, warlockData)

hunter = hxs.xpath('//*[@id="site-body"]/div[5]/div/div/div[2]/div[3]/div[1]').xpath('.//text()').extract()
hunterData = [e.replace(',', '').replace('%', '').replace('\n', '').replace('Top', '').replace('#', '').
replace('\r', '').replace('\n', '').strip() for e in hunter]
hunterData = filter(None, hunterData)


item = DestinytrackerProfilesItem()
data = crucibleSummaryData
item['DTRscore'] = [float(data[1]), float(data[2])]
....

最佳答案

您当前的 XPath 表达式非常脆弱并且不可读。

如果我们不依赖于父 div 元素的相对位置及其位置,而是使用 block 标题会怎么样 - 在 Crucible 的情况下,它可能是:

//h2[. = 'Crucible Summary']/following::div[@class='stats-stat-list']

对于术士和其他角色,您可以寻找包含子字符串的strong 元素文本:

//div[@class = "character-details" and contains(.//strong, "Warlock")]

关于python - 如何使用Scrapy采集页面不同部分的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45441423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com