我是菜鸟,想用scrapy框架抓东西,但是遇到了麻烦:
HTML A:
<ul class="tip" id="tip1">
<li id="tip1_0">
<a href="http://***" title="***" target="_self">***
</a>
</li>
<li id="tip1_1">
<a href="http://***" title="***" target="_self">***
</a>
</li>
<li id="tip1_2">
<a href="http://***" title="***" target="_self">***
</a>
</li>
</ul>
我使用:
f = response.xpath("//*[@id='tip1']//li/a/@href | //*[@id='tip1']//li/a/@title").extract()
当我得到 f 是一个列表时,我会将 list(f) 更改为 dict(name0=f[0], value0=f[1], name1=f[2], value1=[f3] , 等等)。有什么方法更容易吗?
HTML B:
<div class="info">
<a target="_blank" href="***" title="***">
</a>
</div>
<div class="info">
<a target="_blank" href="***" title="***">
</a>
</div>
<div class="info">
<a target="_blank" href="***" title="***">
</a>
</div>
在这种情况下:
file = response.xpath('//div[@class="info"]')
for line in file:
f = line.xpath('/a/@href').extract()
d = line.xpath('/a/@title').extract()
但是,它不起作用,只返回 'f = []' 和 'd =[]',所以,我很困惑,我该如何解决这个问题?非常感谢。
最佳答案
您可以通过在前面加上点使您的内部表达式特定于上下文:
f = line.xpath('./a/@href').extract()
d = line.xpath('./a/@title').extract()
或者,将您的外部表达式指向a
并获取@href
和@title
:
file = response.xpath('//div[@class="info"]/a')
for line in file:
f = line.xpath('@href').extract_first()
d = line.xpath('@title').extract_first()
还要注意 extract_first()
方法的使用。
关于python - 如何在函数中使用 Xpath 和 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964639/