1

私は単純に見える何かをしようとしています...私はこのリンクからロイターリストの会社名をこすり取ろうとしています:

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

しかし、私は会社名にアクセスできません! 実際、多くの xpath クエリをいじった後、テーブルにアクセスする際に問題が発生しました。「3M社」や「アボット・ラボラトリーズ」などの名前をつかもうとしている

私が使用したコードのスニペットは次のとおりです。

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"]'、しかし運がなかった

誰でも助けることができますか?これは、自分が何をしているのかを知っている人がかなり早く修正できるものだと思います ありがとう!

4

1 に答える 1

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
于 2012-06-06T04:49:15.727 に答える