【问题标题】:urllib2.urlopen(url).read() fails to read the URL contenturllib2.urlopen(url).read() 读取 URL 内容失败
【发布时间】:2015-12-24 06:30:35
【问题描述】:

我正在尝试阅读链接的网页内容:http://www.quikr.com/Mobile-Phones/y149 使用以下 python 命令:

import requests
import urllib2
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'}
url = 'http://www.quikr.com/Mobile-Phones/y149'
req = urllib2.Request(url, headers=hdr)
page = urllib2.urlopen(req).read()

print page 给出以下输出:

<!DOCTYPE html>
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="refresh" content="10; url=/distil_r_captcha.html?Ref=/Mobile-Phones/y149&amp;distil_RID=97C53AFC-AA02-11E5-B76A-8C12C4D2AB6C&amp;distil_TID=20151224055301" />
<script type="text/javascript">
    (function(window){
        try {
            if (typeof sessionStorage !== 'undefined'){
                sessionStorage.setItem('distil_referrer', document.referrer);
            }
        } catch (e){}
    })(window);
</script>
<script type="text/javascript" src="/QkrDIV1cexsvzwdadarecara.js" defer></script><style type="text/css">#d__fFH{position:absolute;top:-5000px;left:-5000px}#d__fF{font-family:serif;font-size:200px;visibility:hidden}#qttwcrxueetv{display:none!important}</style></head>
<body>
<div id="distil_ident_block">&nbsp;</div>
</body>
</html>

是否有任何解决方法来获取要读取的实际 url 内容。任何帮助表示赞赏。 提前致谢!!

【问题讨论】:

  • 你不应该把网址放在引号里吗?
  • 刚刚检查了一个错字
  • 我使用您的代码获取了页面内容。我没有得到你得到的输出。
  • 很奇怪。我可以知道你在打印页面后看到了什么,因为我仍然得到上面粘贴的相同输出

标签: python web web-scraping


【解决方案1】:

一种选择是通过selenium 自动化真正的浏览器。工作样本:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.quikr.com/Mobile-Phones/y149")

for phone in driver.find_elements_by_css_selector(".snb_entire_ad"):
    link = phone.find_element_by_css_selector("a.adttllnk")

    print link.text

driver.close()

如果要获取页面源,使用.page_source(当然是在关闭驱动之前):

print(driver.page_source)

【讨论】:

  • 感谢您的意见。我遇到了 OSError 错误:[Errno 2] 没有这样的文件或目录,使用驱动程序 = webdriver.Firefox()。正在尝试解决此问题并能够测试您的解决方案。
  • 这似乎显示了与每个广告相关的所有标题。但是,我希望使用 page = urllib2.urlopen(req).read() 来获取 URL 的页面源。或者,也想听听您对为什么 urllib2.urlopen("url").read() 不适用于此 url:quikr.com/Mobile-Phones/y149.
  • @Deepak 好的,更新了如何获取页面源代码。
  • driver.page_source 为我提供了我想要的页面源,但是当我自动化抓取网站的过程时,它试图阻止我(我想我是一个机器人)。无法获得解决方法。作为替代方法,尝试在 driver.get(url) 中添加延迟可能会有所帮助。
  • @Deepak 好吧,发生了什么事 - 他们是如何试图阻止你的?谢谢。
猜你喜欢
  • 2014-02-25
  • 2015-08-26
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多