我正在嘗試從紐約時報檔案搜索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