python - 如何在函数中使用 Xpath 和 CSS 选择器

标签 python html css xpath

我是菜鸟,想用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/

相关文章:

python - 如何避免 Django View 中的重复代码?

python - 简单的python正则表达式找不到字(在空格字符内)

css - Sass 循环 @mixin 和 @include

python - Cython 中包含一个较大的 C 库

html - 如何调整输入框中占位符文本的对齐方式?

html - 更改图标类型转换厂 = 搜索和替换类名 snafu

javascript - Babylon.js 网格拾取和忽略一些网格

css - 在移动浏览器上的固定位置

css - 输入类型=范围在 Firefox 中不会拉伸(stretch)

python - 如果您使用加号而不是 tf.add,tensorflow 是否仍会正确计算梯度?