urllib2返回浏览器的不同页面?

时间:2010-07-09 06:26:32

标签: python screen-scraping urllib2

我正在尝试抓一个页面(我的路由器的管理页面),但该设备似乎正在为urllib2提供与我的浏览器不同的页面。以前有人发现过这个吗?我怎么能绕过它?

这是我正在使用的代码:

>>> from BeautifulSoup import BeautifulSoup
>>> import urllib2
>>> page = urllib2.urlopen("http://192.168.1.254/index.cgi?active_page=9133&active_page_str=page_bt_home&req_mode=0&mimic_button_field=btn_tab_goto:+9133..&request_id=36590071&button_value=9133")
>>> soup = BeautifulSoup(page)
>>> soup.prettify()

(通过降价删除html输出)

5 个答案:

答案 0 :(得分:5)

使用 firebug 观察将哪些标头和Cookie发送到服务器。然后使用 urllib2.Request cookielib 模拟相同的请求。

编辑:您也可以使用mechanize

答案 1 :(得分:1)

比Wireshark更简单,可能是使用Firebug查看正在进行的请求的形式,然后在代码中模拟相同的请求。

答案 2 :(得分:0)

使用Wireshark查看浏览器的请求,并添加缺少的部分,以便您的请求看起来一样。

要调整urllib2标头,请尝试this

答案 3 :(得分:0)

可能这不起作用,因为您没有提供管理页面的凭据

使用mechanize加载登录页面并填写用户名/密码。

然后你应该设置一个cookie,让你继续进入管理页面。

使用urllib2要困难得多。如果您选择坚持这条路线,您将需要自己管理cookie。

答案 4 :(得分:0)

就我而言,它是以下之一:

1)网站可以理解访问不是来自浏览器,所以我不得不在python中假冒浏览器

# Build a opener to fake a browser... Google here I come!
opener = urllib2.build_opener()
# To fake the browser
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
#Read the page
soup = BeautifulSoup(opener.open(url).read())

2)页面内容由javascript动态填充。在这种情况下,请阅读以下帖子:https://stackoverflow.com/a/11460633/2160507