问题
我有以下问题:我需要使用以下链接搜索有关公司的一些信息。
我需要做的search by entity name
是search type
“开始”下拉值。我还希望在该Display number of items to view
部分中每页看到“所有项目”。例如,如果我在“输入名称”文本框中输入“google”,脚本应该返回名称以“google”开头的公司列表(尽管这只是我想要做的事情的起点)。
问题: 我应该如何使用 Python 来做到这一点?我找到了以下线程:Using Python to ask a web page to run a search
我尝试了第一个答案中的示例,代码如下:
from bs4 import BeautifulSoup as BS
import requests
protein='Q9D880'
text = requests.get('http://www.uniprot.org/uniprot/' + protein).text
soup = BS(text)
MGI = soup.find(name='a', onclick="UniProt.analytics('DR-lines', 'click', 'DR-MGI');").text
MGI = MGI[4:]
print protein +' - ' + MGI
上面的代码有效,因为UniPort
网站包含analytics
,它采用这些参数。但是,我使用的网站没有。
我也尝试做与此线程中的第一个答案相同的事情:如何在 python 中将查询提交到 .aspx 页面
但是,第一个答案中提供的示例代码在我的机器上不起作用(Ubuntu 12.4 with Python 2.7)。我也不清楚应该有哪些值,因为我正在处理不同的 aspx 网站。
我如何使用 Python 以某些条件开始搜索 (不确定这是正确的网络术语,可能是提交表单?)?
我来自 C++ 背景,没有做任何网络工作。我也在学习Python。任何帮助是极大的赞赏。
第一次编辑:
在@Kabie 的大力帮助下,我收集了以下代码(试图了解它是如何工作的):
import requests
from lxml import etree
URL = 'http://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSearch.aspx'
#With get_fields(), we fetched all <input>s from the form.
def get_fields():
res = requests.get(URL)
if res.ok:
page = etree.HTML(res.text)
fields = page.xpath('//form[@id="Form1"]//input')
return { e.attrib['name']: e.attrib.get('value', '') for e in fields }
#hard code some selects from the Form
def query(data):
formdata = get_fields()
formdata.update({
'ctl00$MainContent$ddRecordsPerPage':'25',
}) # Hardcode some <select> value
formdata.update(data)
res = requests.post(URL, formdata)
if res.ok:
page = etree.HTML(res.text)
return page.xpath('//table[@id="MainContent_SearchControl_grdSearchResultsEntity"]//tr')
def search_by_entity_name(entity_name, entity_search_type='B'):
return query({
'ctl00$MainContent$CorpSearch':'rdoByEntityName',
'ctl00$MainContent$txtEntityName': entity_name,
'ctl00$MainContent$ddBeginsWithEntityName': entity_search_type,
})
result = search_by_entity_name('google')
上面的代码放在一个名为query.py
. 我收到以下错误:
回溯(最后一次调用):文件“query.py”,第 39 行,
结果 = search_by_entity_name('google')
文件“query.py”,第 36 行,search_by_entity_name
'ctl00$MainContent$ddBeginsWithEntityName':entity_search_type,
文件“query.py”,第 21 行,查询
formdata.update({
AttributeError: 'NoneType' object has no attribute 'update'
在我看来,搜索不成功?为什么?