试图通过第三方网站进行蜘蛛/爬行,但我似乎遇到了障碍:
urlopen'ing一个网站获得了回应,但阅读和打印HTML似乎告诉我,我什么都没有回来。这可能是由于另一端有某种阻塞吗?还是什么?
目前,我正试图打开纽约时报的文章。主页返回HTML,文章,呃,不。
try:
source = urllib.urlopen(target_site)
html = source.read()
print "HTML: ", html.lower()
输出:
HTML:
(other stuff)
哦,它也偶尔会超时,但这是一个不同的故事,我希望。
这不是“纽约时报”文章的问题。它可能会拒绝您的页面,因为您在标头中没有适当的用户代理。 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浏览器中打开它。
我以为我会为requests添加一个插头。它可以相对容易地做到这一点。在easy_install requests
或pip install requests
之后:
import requests
page = requests.get(page_url)
html = page.content
编辑:我看到问题的评论中发布的URL,并认为我确认requests.get
可以使用该页面。
对于使用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