我正在尝试从纽约时报档案搜索NLP任务中搜索文章的全文(搜索此处:http://query.nytimes.com/search/sitesearch/)。我可以合法访问所有文章,并可以查看他们,如果我手动搜索存档。从Python中的NYT档案中刮掉完整的文章?
但是,当我使用urllib2,机械化或请求从搜索结果页面拉取HTML时,它们不会拉动代码的相关部分(链接到文章,点击次数),以便我可以抓取全文。我没有收到错误消息,检查元素中清晰可见的相关部分仅仅是从拉取的HTML中丢失的。
因为有些文章只能被订阅者访问,所以在我看来,这可能是问题所在,并且我通过机械化提供了我的用户凭证,但是这在代码中没有任何区别。
有一个NYT API,但它不能访问文章的全文,所以对我来说这对我来说是没用的。
我认为纽约时报有意让这个页面变得困难,但我有合法的权利来查看所有这些文章,所以如果能够帮助我解决他们所面临的障碍,我会很感激任何帮助。我是新来的网络抓取,我不知道从哪里开始解决这个问题。
我试着用以下所有的拉动HTML,每一次得到了相同的不完整的结果:
url = 'http://query.nytimes.com/search/sitesearch/#/India+%22united+states%22/from19810101to20150228/allresults/1/allauthors/relevance/Opinion/'
#trying urllib
import urllib
opener = urllib.FancyURLopener()
print opener.open(url).read()
#trying urllib2
import urllib2
request = urllib2.Request(url)
response = urllib2.urlopen(request)
print response.read()
#trying requests
import requests
print requests.get(url).text
#trying mechanize (impersonating browser)
import mechanize
import cookielib
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
r = br.open(url)
print r.read()
你的代码是什么? – 2015-03-02 16:43:13
您能解释更多关于“我有法定权利查看所有这些文章” - 我怀疑这是真的。是的,对于学术界和研究机构来说,拥有公司媒体的免费和可浏览的记录是件好事,但我知道的唯一一个记录(Lexis Nexis除外)是可支付费用的。你的用例是什么? – halfer 2015-03-02 18:27:35
此外,如果您想要下载大量数据,至少应该在请求之间插入暂停,以免意外在NYT服务器上执行DoS攻击。 – halfer 2015-03-02 18:32:11