【问题标题】:python scraping reuters site...bad xpath?python 抓取路透社网站...坏 xpath?
【发布时间】:2012-06-06 02:30:40
【问题描述】:

我正在尝试做一些看起来很简单的事情...我正在尝试从此链接中抓取路透社列表的公司名称:

http://www.reuters.com/finance/markets/index?symbol=us!spx&sortBy=&sortDir=&pn=

但是,我无法访问公司名称!真的,在玩了很多 xpath 查询之后,我在访问表时遇到了问题。我正在尝试获取诸如“3M 公司”和“雅培实验室”之类的名称

这是我用过的sn-ps代码:

scrape = []
companies =[]
import lxml
import lxml.html
import lxml.etree

urlbase = 'http://reuters.com/finance/markets/index?symbol=us!spx&sortBy=&sortDir=&pn='
for i in range(1:18):
    url = urlbase+str(i)
    content = lxml.html.parse(url)
    item = content.xpath('XPATH HERE')
    ticker = [thing.text for thing in item]

这是我一直在玩的 xpath:

'//*[@id="topContent"]/div/div[2]/div[1]/table/tr[2]/td[1]/a'
'//*[@id="topContent"]/div/div[2]/div[1]/table/tbody/tr[2]/td[1]/a
'/html/body/div[3]/div[3]/div/div[2]/div/table/tbody/tr[3]/td/a'
'/html/body/div[3]/div[3]/div/div[2]/div/table/tr[3]/td/a'

我尝试通过以下方式访问该特定表: '//table[@class="dataTable sortable"]',但运气不好

谁能帮忙?我觉得这是一个知道自己在做什么的人能够很快解决的问题 谢谢!

【问题讨论】:

  • 你不是跳过了整个表格中的表单标签吗?

标签: python xpath screen-scraping


【解决方案1】:

您尝试抓取的页面在表格内有一个表单。正确的 xpath 应该是'//table[@class="dataTable sortable"]/form/tr/td[1]/a'

另外,您的代码中可能有错字,应该是 range(1,18) 而不是 range(1:18)。这是对我有用的最终代码:

scrape = []
companies =[]
import lxml
import lxml.html
import lxml.etree

urlbase = 'http://reuters.com/finance/markets/index?symbol=us!spx&sortBy=&sortDir=&pn='
for i in range(1,18):
    url = urlbase+str(i)
    content = lxml.html.parse(url)
    item = content.xpath('//table[@class="dataTable sortable"]/form/tr/td[1]/a')
    ticker = [thing.text for thing in item]
    print ticker

【讨论】:

  • 嘿嘿,非常感谢!我本可以发誓我尝试过这种组合,但我想不会。我很感激。
猜你喜欢
  • 1970-01-01
  • 2019-04-26
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2020-09-28
  • 2018-09-01
相关资源
最近更新 更多