2015-03-02 48 views
1

我正在尝试从纽约时报档案搜索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() 
+1

你的代码是什么? – 2015-03-02 16:43:13

+0

您能解释更多关于“我有法定权利查看所有这些文章” - 我怀疑这是真的。是的,对于学术界和研究机构来说,拥有公司媒体的免费和可浏览的记录是件好事,但我知道的唯一一个记录(Lexis Nexis除外)是可支付费用的。你的用例是什么? – halfer 2015-03-02 18:27:35

+0

此外,如果您想要下载大量数据,至少应该在请求之间插入暂停,以免意外在NYT服务器上执行DoS攻击。 – halfer 2015-03-02 18:32:11

回答

1

你为什么不使用像Scrapy的框架?这会给你带来很多动力。例如,您将能够检索您感兴趣的页面的这些部分,并丢弃其余部分。我在这里写了一个处理Scrapy和ajax页面的小例子:http://www.6020peaks.com/2014/12/how-to-scrape-hidden-web-data-with-python/ 也许它可以帮助您了解Scrapy的工作原理。

+0

我还没有尝试过Scrapy,并会研究它 - 谢谢! – ingiborg 2015-03-02 18:55:05

+0

很酷。让我们知道你的发现:) – narko 2015-03-02 20:19:46

0

你可以尝试使用像kimonolabs.com这样的工具来刮掉文章。如果您在使用身份验证时遇到问题,和服拥有一个内置框架,允许您输入和存储您的凭证,这样可以帮助您在受到NYT API限制的地方使用。我做了使用和服,你可以复制和使用,如果你犯了一个和服户口本纽约时报API:https://www.kimonolabs.com/apis/c8i366xe

下面是如何使一个登录后的API帮助中心文章:https://help.kimonolabs.com/hc/en-us/articles/203275010-Fetch-data-from-behind-a-log-in-auth-API-

本文将引导您完成如何通过链接获取详细页面信息:https://help.kimonolabs.com/hc/en-us/articles/203438300-Source-URLs-to-crawl-from-another-kimono-API