2015-03-02 18 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