抓取字引用的问题

时间:2016-01-18 17:35:18

标签: python xpath web-scraping web-crawler lxml

我正在尝试抓取wordreference,但我没有成功。

我遇到的第一个问题是,通过JavaScript加载了一个很大的部分,但这不是问题,因为我可以在源代码中看到我需要的东西。

因此,例如,我想提取给定单词的前两个含义,所以在此网址中:http://www.wordreference.com/es/translation.asp?tranword=crane我需要提取grullagrúa

这是我的代码:

import lxml.html as lh
import urllib2

url = 'http://www.wordreference.com/es/translation.asp?tranword=crane'
doc = lh.parse((urllib2.urlopen(url)))
trans = doc.xpath('//td[@class="ToWrd"]/text()')

for i in trans:

    print i

结果是我得到一个空列表。

我试图用scrapy抓它,但没有成功。我不知道发生了什么,我能够抓取它的唯一方法就是使用curl,但这是一个特殊的方法,我想用优雅的方式用Python做。

非常感谢

1 个答案:

答案 0 :(得分:1)

您似乎需要发送User-Agent标头,请参阅Changing user agent on urllib2.urlopen

此外,只需切换到requests即可(默认情况下会自动发送python-requests/version用户代理):

import lxml.html as lh
import requests

url = 'http://www.wordreference.com/es/translation.asp?tranword=crane'

response = requests.get("http://www.wordreference.com/es/translation.asp?tranword=crane")
doc = lh.fromstring(response.content)

trans = doc.xpath('//td[@class="ToWrd"]/text()')
for i in trans:
    print(i)

打印:

grulla 
grúa 
plataforma 
...
grulla blanca 
grulla trompetera