0

试图通过第三方网站进行蜘蛛/爬网,但我似乎遇到了障碍:

urlopen'ing 网站得到响应,但阅读和打印 HTML 似乎告诉我我没有得到任何回报。这可能是由于另一端的某种阻塞造成的吗?还是什么?

目前,我正在尝试打开《纽约时报》的文章。主页返回 HTML,文章,呃,不。

try:
    source = urllib.urlopen(target_site)
    html =  source.read()
    print "HTML: ", html.lower()

输出:

HTML:
(other stuff)

哦,它有时也会超时,但我希望这是一个不同的故事。

4

3 回答 3

3

这不是纽约时报文章的问题。它可能会拒绝您的页面,因为您在标题中没有合适的用户代理。这篇文章告诉你如何去做。

如果是这种情况,试试这个:

try:
    req = urllib2.Request(target_site)
    req.add_header("User-Agent", "Mozilla/5.0")
    source = urllib.urlopen(req)
    html =  source.read()
    print "HTML: ", html.lower()

刮那个。这不是《纽约时报》文章的问题。这是因为 nytimes.com 试图给你 cookie;但它不能,这会导致重定向循环。您需要创建一个可以处理 cookie 的自定义 url 打开器。您可以通过以下方式访问

#make an url opener that can handle cookies
opener = urllib2.build_opener(urllib2.HTTPCookieHandler())
#read in the site
response = opener.open(target_site)
html = response.read()

要验证它是否是正确的文章,您可以将其写出来并在网络浏览器中打开。

于 2013-03-01T00:51:46.080 回答
0

我想我会为requests添加一个插件。它可以相对容易地做到这一点。easy_install requests或之后pip install requests

import requests

page = requests.get(page_url)
html = page.content

编辑:我看到了在问题评论中发布的 URL,并认为我会确认该requests.get页面确实适用。

于 2013-03-01T06:38:49.063 回答
0

对于在使用 urllib2 时遇到此问题的任何其他人,问题也可能是您仅返回带有重定向链的元标记。您可以通过打印打开 url 的结果并 read() 来确认这一点:

<meta http-equiv="refresh" content="0;url=http://www.yourURL.com.mx/ads.txt"/>

首先检查您是否将 cookie 正确保存到 jar 中,然后查看此链接:how to follow meta refreshes in Python

于 2018-06-05T17:20:15.970 回答