urllib2没有返回HTML

问题描述 投票:0回答:3

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

urlopen'ing一个网站获得了回应,但阅读和打印HTML似乎告诉我,我什么都没有回来。这可能是由于另一端有某种阻塞吗?还是什么?

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

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

输出:

HTML:
(other stuff)

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

python html web-crawler urllib2
3个回答
3
投票

这不是“纽约时报”文章的问题。它可能会拒绝您的页面,因为您在标头中没有适当的用户代理。 This post告诉你如何做到这一点。

如果是这样的话,试试这个:

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的自定义URL开启工具。您可以通过以下方式访问this

#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()

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


0
投票

我以为我会为requests添加一个插头。它可以相对容易地做到这一点。在easy_install requestspip install requests之后:

import requests

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

编辑:我看到问题的评论中发布的URL,并认为我确认requests.get可以使用该页面。


0
投票

对于使用urllib2时遇到此问题的任何其他人,问题可能还在于您只返回带有重定向链的元标记。您可以通过打开URL打印结果并读取()来确认:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.