python - 用 Python 从 NYT 文件中抓取完整的文章?

标签 python web-scraping

我正在尝试从纽约时报文件搜索 NLP 任务(在此处搜索:http://query.nytimes.com/search/sitesearch/)中抓取文章的全文。我可以合法访问所有文章,如果我手动搜索文件,就可以查看它们。

但是,当我使用 urllib2、mechanize 或 requests 从搜索结果页面中提取 HTML 时,它们并没有提取代码的相关部分(文章链接、点击数),这样我就可以抓取完整的内容文章。我没有收到错误消息,在检查元素中清晰可见的相关部分只是从提取的 HTML 中丢失了。

因为某些文章仅供订阅者访问,我想到这可能是问题所在,并且我已通过 Mechanize 随请求提供了我的用户凭据,但这对提取的代码没有影响。

有一个 NYT API,但它不提供对文章全文的访问权限,因此对我而言它毫无用处。

我认为 NYT 故意让抓取页面变得困难,但我有合法权利查看所有这些文章,因此非常感谢任何可以帮助我绕过他们设置的障碍的策略帮助。我是网络抓取的新手,不知道从哪里开始解决这个问题。

我尝试使用以下所有内容提取 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()

最佳答案

为什么不用像Scrapy这样的框架呢?这将为您提供开箱即用的强大功能。例如,您将能够检索您感兴趣的页面部分并丢弃其余部分。我在这里写了一个处理 Scrapy 和 ajax 页面的小例子:http://www.6020peaks.com/2014/12/how-to-scrape-hidden-web-data-with-python/ 也许它可以帮助您了解 Scrapy 的工作原理。

关于python - 用 Python 从 NYT 文件中抓取完整的文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28814933/

相关文章:

python - 从另一个字符串中减去一个字符串

javascript - 从网站上读取信息并存储在 excel 文件中

php - 阅读网站页面

python-3.x - 如何在python中使用xpath或CSS选择器在时间标签中提取datetime属性的值?

Python 网络抓取 - 实时数据

python - 冲突准则

python - 如何在 Python 中对我的 Dataframe 的每一列进行 ADF 测试?

python - 斯皮科的API?刮Spokeo

python - 扩展 MongoEngine 用户文档是不好的做法吗?

python - Python 中的异步 PureMVC