【问题标题】:web scraping with scrapy. how to define an xpath wildcard for numbers?使用 scrapy 进行网页抓取。如何为数字定义 xpath 通配符?
【发布时间】:2015-10-03 04:11:59
【问题描述】:

我正在尝试从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 中让它们在后面出现换行符?

【问题讨论】:

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

标签: python html xpath scrapy


【解决方案1】:

像这样遍历标题:

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。就是说这个语句是相对于第一个的!

【讨论】:

  • 可以在 shell 中使用它吗?或者我想我需要将它写入一个文件?
  • 刚刚测试过了。它在外壳中工作。您想添加一个print title 语句,以便您可以看到输出。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2021-01-13
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2019-03-17
相关资源
最近更新 更多