网络刮痧与scrapy。如何为数字定义xpath通配符?

时间:2015-07-14 13:28:15

标签: python html xpath scrapy

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

我想要的元素的xpath,根据我的chrome插件,它神奇地告诉你所选元素的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中是否有一种方法可以让它们在换行后出现?

1 个答案:

答案 0 :(得分:4)

像这样循环标题:

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

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

相关问题