让我先说我的编程经验很少。我在最近几天学会了一大堆试图编写这个程序的人。我使用PyCharm,请求,Beautiful Soup和lxml在Windows 7上运行Python 2.7。
我正在尝试从一个严重依赖Javascript的网站上抓取数据。我有两个选择:
1)我需要的数据是通过Javascript填充的,不一定需要登录。但是我无法弄清楚如何获取这些数据。我使用实时HTTP Headers chrome插件生活受监控的标头,我想我已经找到了可以实现此功能的Javascript但我无法理解它。它是一长串代码,如果有人有兴趣看看,我会发布它。
或
2)在其中一个主要页面上,我找到了一系列身份证号码,我可以用它来为我正在分析的每个项目生成URL。问题是我必须登录才能看到这些单独的项目页面。我的代码如下:
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from BeautifulSoup import BeautifulSoup
import ssl
# Request a date from user
UDate = "06/22/2015" # raw_input('Enter a date mm/dd/yyyy\n')
# Open TLSv1 Adapter (Whataver that means)
class MyAdapter(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=ssl.PROTOCOL_TLSv1)
# Begin a requests session. Every get from here on out will use TLSv1 Protocol
import requests
payload = {
'LogName': 'xxxxxxxx',
'LogPass': 'xxxxxxxx'
}
s = requests.Session()
s.mount('https://xxxx.xxx', MyAdapter())
# Login with post and Request source code from main page.
log = s.post('LoginURL', data=payload)
print log.text
result = s.get(url)
soup = BeautifulSoup(result.content)
print soup
帖子或get都没有显示我登录的网站。 HTML源代码中的logform标识如下所示:
<div id="DivLogForm">
<label for="BadText"><div id="BadText" class="BadText" style="display:none" tabindex="-2">User Name or Password is Invalid</div></label>
<div class="LogLabel">
<label for="LogName" > User Name </label><input tabindex="0" id="LogName" class="LogInput" value="" />
</div>
<div class="LogLabel">
<label for="LogPass" >User Password </label><input tabindex="0"id="LogPass" type="password" class="LogInput" value="" />
</div>
所以我通过帖子传递LogName和LogPass。
还有一个带有这段代码的logform.js
$("#LogButton").click(function()
{ //$('#divLogForm').hide();
//$('#divLoading').show();
var uName = $("#LogName").val();
var uPass = $("#LogPass").val();
var url = "/index.cfm";
$.post(url, {ZACTION:'AJAX',ZMETHOD:'LOGIN',func:'LOGIN',USERNAME:uName, USERPASS:uPass},
function(data){if (data.isOk =="YES"){location.href="/index.cfm";}
else {$('.BadText').show(); $('#BadText').focus();};
},"json");
});
我的代码中的LoginURL取自此脚本中的var url。我尝试过使用USERNAME&amp; USERPASS和我在我的帖子中尝试了uName和uPass,但这些也没有用。
不知道如何向前迈进。非常感谢任何帮助
答案 0 :(得分:1)
您发布的最后一点javascript提供了一条关于您的登录POST请求无法正常工作的线索。
根据javascript,您应该使用登录POST发送一个类似于以下内容的字典:
@objc func toggleSideMenu(sender: AnyObject?) {
toggleSideMenuView()
}