python - 使用 scrapy 进行网页抓取。如何为数字定义 xpath 通配符?

标签 python html xpath scrapy

我想做的是从 stackoverflow careers subsection 中获取不同就业机会的名称。 .

根据我的 chrome 插件,我想要的元素的 xpath 会神奇地告诉您所选元素的 xpath,如下所示:

//*[@id="content"]/div[1]/div[1]/div[2]/div[1]/div[1]/h3/a

//*[@id="content"]/div[1]/div[1]/div[2]/div[1]/div[2]/h3/a

//*[@id="content"]/div[1]/div[1]/div[2]/div[1]/div[3]/h3/a

//*[@id="content"]/div[1]/div[1]/div[2]/div[1]/div[4]/h3/a

我可以使用此命令将标题单独提取到 scrapy shell :

response.xpath('//*[@id="content"]/div[1]/div[1]/div[2]/div[1]/div[4]/h3/a').extract()

等等,通过切换最后一个div[]元素的编号。

我的问题是,如何制作一个通用命令来提取页面上的所有标题?

我查看了 w3schools关于 xpath 语法,但我没有看到任何关于数字通配符的信息,是这样的吗?这是提取所有不同职位名称的合理方法吗?

html 看起来像这样:

[u'<a class='job-link' href='/jobs/92881/software-engineer-java-m-w-advitec-informatik-gmbh?a=v9gjNYx3zGg&amp;so=i' title='Software Engineer JAVA (m/w)'>Software Engineer JAVA (m/w)</a>']

这并不是完全无用的,我可以使用它,然后用 jsoup 或其他东西进一步提取它,但我需要它来完成所有工作,而不仅仅是一个,你知道吗?

还有...scrapy shell中有没有办法让它们显示后带有换行符?

最佳答案

像这样循环标题:

xpath_jobs_sel = './/div[contains(@class,"listResults")]//a[@class="job-link"]'
for sel in response.xpath(xpath_jobs_sel):
    title = sel.xpath('./@title').extract()

好处是,您可以嵌套 XPath。第一个 XPath 生成一个包含 Selectors 的列表。请注意内部语句开头的。这意味着这个陈述是相对于第一个陈述的!

关于python - 使用 scrapy 进行网页抓取。如何为数字定义 xpath 通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31408061/

相关文章:

xpath - 如何使用xpath获取索引而不是相对位置

python - 为什么这里的python socket无法解析域名?

python - 显示子进程标准输出的小部件?

python - 如何使一个对象既是 Python2 又是 Python3 的迭代器?

python - 将 DataFrame 转换为字典的字典

css - div 在 td 中,但 td 被意外扩展

php - 将多行插入表中

css - 我的 img 元素不会与其父元素的父 div 重叠吗?

xslt - 在不假设属性值的情况下,通过按属性值对元素进行分组来使用 xsl 更改元素层次结构?

javascript - 如何使用javascript和xpath获取图像src?