在下面我试图获取网站http://www.searspartsdirect.com的所有超链接,但我得到输出,我在这里做错了什么
<html>
<body onload="document.acsForm.submit();">
<form name="acsForm" action="https://www.searspartsdirect.com/partsdirect/j_acegi_cas_security_check?ssonofail=true" method="post">
<div style="display: none">
<textarea rows=10 cols=80 name="logonPassword"></textarea>
<textarea rows=10 cols=80 name="loginId"></textarea>
<textarea rows=10 cols=80 name="screenName"></textarea>
<textarea rows=10 cols=80 name="errorCode"></textarea>
</div>
</form>
</body>
</html>
这是我的剧本:
import httplib2
import sys
from bs4 import BeautifulSoup , SoupStrainer
import urllib , urllib2 , cookielib , random ,datetime,time,sys
sitename=sys.argv[1]
http = httplib2.Http()
status, response = http.request(sitename)
cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(urlOpener)
request = urllib2.Request(sitename)
url = urlOpener.open(request)
contents = url.read()
soup = BeautifulSoup(contents)
for a in soup.findAll('a'):
print a
答案 0 :(得分:1)
您的问题与BeautifulSoup无关 - 索引页面上的源代码使用Javascript重定向到另一个URL(因此只需下载HTML就会为您提供一个无聊的页面)
重定向是因为:
<body onload="document.acsForm.submit();">
..提交以下表格:
<form name="acsForm"
action="https://www.searspartsdirect.com/partsdirect/j_acegi_cas_security_check?ssonofail=true"
method="post">
如果您只是尝试抓取浏览器重定向到的页面,则会显示一个空白页面,因此我猜您需要对“操作”URL执行POST请求,并且可能会存储它设置的cookie。
在POST数据中,您可能需要包含以下字段的值:
<textarea rows=10 cols=80 name="logonPassword"></textarea>
<textarea rows=10 cols=80 name="loginId"></textarea>
<textarea rows=10 cols=80 name="screenName"></textarea>
<textarea rows=10 cols=80 name="errorCode"></textarea>
..这就像{'logonPassword': '', 'loginId': '', ...}
,它被序列化并作为请求中的POST数据传递
然后使用cookie,您可以向http://www.searspartsdirect.com/partsdirect/index.action
或类似的请求发送,您的BeautifulSoup代码应该按预期工作..
mechanize可能会让这一切变得更简单 - 主页上的示例基本上就是您想要的