ScraperwikiでPythonを使用してスクレーパーを作成する方法を学んでいます。これまでのところ順調ですが、頭を動かすことができない問題について、頭をかいて数日を過ごしました。テーブルからすべてのリンクを取得しようとしています。それは機能しますが、001から486に移動するリンクのリストから、045にのみそれらを取得し始めます。url/ sourceはWebサイト上の都市のリストであり、ソースはここで確認できます:
http:// www .tripadvisor.co.uk / pages / by_city.htmlおよび特定のhtmlはここから始まります:
</td></tr>
<tr><td class=dt1><a href="by_city_001.html">'s-Gravenzande, South Holland Province - Aberystwyth, Ceredigion, Wales</a></td>
<td class=dt1><a href="by_city_244.html">Los Corrales de Buelna, Cantabria - Lousada, Porto District, Northern Portugal</a></td>
</tr>
<tr><td class=dt1><a href="by_city_002.html">Abetone, Province of Pistoia, Tuscany - Adamstown, Lancaster County, Pennsylvania</a> /td>
<td class=dt1><a href="by_city_245.html">Louth, Lincolnshire, England - Lucciana, Haute-Corse, Corsica</a></td>
</tr>
<tr><td class=dt1><a href="by_city_003.html">Adamswiller, Bas-Rhin, Alsace - Aghir, Djerba Island, Medenine Governorate</a> </td>
<td class=dt1><a href="by_city_246.html">Luccianna, Haute-Corse, Corsica - Lumellogno, Novara, Province of Novara, Piedmont</a></td>
</tr>
私が求めているのは、「by_city_001.html」から「by_city_486.html」へのリンクです。これが私のコードです:
def scrapeCityList(pageUrl):
html = scraperwiki.scrape(pageUrl)
root = lxml.html.fromstring(html)
print html
links = root.cssselect('td.dt1 a')
for link in links:
url = 'http://www.tripadvisor.co.uk' + link.attrib['href']
print url
次のようにコードで呼び出されます。
scrapeCityList('http://www.tripadvisor.co.uk/pages/by_city.html')
これを実行すると、0045から始まるリンクのみが返されます。
出力(045〜486)
http://www.tripadvisor.co.ukby_city_045.html
http://www.tripadvisor.co.ukby_city_288.html
http://www.tripadvisor.co.ukby_city_046.html
http://www.tripadvisor.co.ukby_city_289.html
http://www.tripadvisor.co.ukby_city_047.html
http://www.tripadvisor.co.ukby_city_290.html and so on...
セレクターを次のように変更してみました。
links = root.cssselect('td.dt1')
そしてそれはこのように487の「要素」をつかみます:
<Element td at 0x13d75f0>
<Element td at 0x13d7650>
<Element td at 0x13d76b0>
しかし、これから「href」値を取得することはできません。cssselect行で「a」を選択すると最初の44リンクが失われる理由がわかりません。コードを見ましたが、手がかりがありません。
助けてくれてありがとう!
クレア