我正在尝试废弃网页以从请求响应返回的文本数据中获取表值。
</thead>
<tbody class="stats"></tbody>
<tbody class="annotation"></tbody>
</table>
</div>
实际上tbody
类中存在一些数据但是`我无法使用请求访问该数据。
这是我的代码
server = "http://www.ebi.ac.uk/QuickGO/GProtein"
header = {'User-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de;
rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'}
payloads = {'ac':'Q9BRY0'}
response = requests.get(server, params=payloads)
print(response.text)
#soup = BeautifulSoup(response.text, 'lxml')
#print(soup)
答案 0 :(得分:1)
如果您要下载多个文件,至少只能以这种形式执行此操作。
>>> import bs4
>>> form = '''<form method="POST" action="GAnnotation"><input name="a" value="" type="hidden"><input name="termUse" value="ancestor" type="hidden"><input name="relType" value="IPO=" type="hidden"><input name="customRelType" value="IPOR+-?=" type="hidden"><input name="protein" value="Q9BRY0" type="hidden"><input name="tax" value="" type="hidden"><input name="qualifier" value="" type="hidden"><input name="goid" value="" type="hidden"><input name="ref" value="" type="hidden"><input name="evidence" value="" type="hidden"><input name="with" value="" type="hidden"><input name="source" value="" type="hidden"><input name="q" value="" type="hidden"><input name="col" value="proteinDB,proteinID,proteinSymbol,qualifier,goID,goName,aspect,evidence,ref,with,proteinTaxon,date,from,splice" type="hidden"><input name="select" value="normal" type="hidden"><input name="aspectSorter" value="" type="hidden"><input name="start" value="0" type="hidden"><input name="count" value="25" type="hidden"><input name="format" value="gaf" type="hidden"><input name="gz" value="false" type="hidden"><input name="limit" value="22" type="hidden"></form>'''
>>> soup = bs4.BeautifulSoup(form, 'lxml')
>>> action = soup.find('form').attrs['action']
>>> action
'GAnnotation'
>>> inputs = soup.findAll('input')
>>> params = {}
>>> for input in inputs:
... params[input.attrs['name']] = input.attrs['value']
...
>>> import requests
>>> r = requests.post('http://www.ebi.ac.uk/QuickGO/GAnnotation', data=params)
>>> r
<Response [200]>
>>> open('temp.htm', 'w').write(r.text)
4082
如果您只是点击按钮,下载的文件就是您收到的文件。
Chrome浏览器的详细信息:
您希望此元素的outerHTML
属性用于上述代码中使用的信息,即其action
和名称 - 值对。 (以及使用POST的隐含信息。)
现在使用请求模块向网站提交请求。
以下是params
中的项目列表,以防您想要提出其他请求。
>>> for item in params.keys():
... item, params[item]
...
('qualifier', '')
('source', '')
('count', '25')
('protein', 'Q9BRY0')
('format', 'gaf')
('termUse', 'ancestor')
('gz', 'false')
('with', '')
('goid', '')
('start', '0')
('customRelType', 'IPOR+-?=')
('evidence', '')
('aspectSorter', '')
('tax', '')
('relType', 'IPO=')
('limit', '22')
('col', 'proteinDB,proteinID,proteinSymbol,qualifier,goID,goName,aspect,evidence,ref,with,proteinTaxon,date,from,splice')
('q', '')
('ref', '')
('select', 'normal')
('a', '')
答案 1 :(得分:0)
我从你上面的评论中得知你正在处理javascript。为了刮擦&amp;解析你可以使用selenium的javascript,这是一个可以帮助你的案例片段:
from selenium import webdriver
from bs4 import BeautifulSoup
url =''
browser = webdriver.Chrome()
browser.get(url)
soup = BeautifulSoup(browser.page_source, "lxml")
soup.prettify()
您必须安装ChromeDriver&amp; Chrome浏览器。 如果你想要你可以使用像PhantomJs这样的无头浏览器,那么你每次执行脚本时都不必处理整个chrome浏览器。