我正在尝试抓一个页面(我的路由器的管理页面),但该设备似乎正在为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输出)
答案 0 :(得分:5)
使用 firebug 观察将哪些标头和Cookie发送到服务器。然后使用 urllib2.Request 和 cookielib 模拟相同的请求。
编辑:您也可以使用mechanize。
答案 1 :(得分:1)
比Wireshark更简单,可能是使用Firebug查看正在进行的请求的形式,然后在代码中模拟相同的请求。
答案 2 :(得分:0)
答案 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