作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想去this页面,并抓取“事件”选项卡中的所有行:
Antibacterial Activities
1 Flora:E.coli MIC:5.59µg/ml (2.0005µM) Method:MIC :
2 Flora:A.salmonicida subsp salmonicida MIC:11.18µg/ml (4.001µM) Method:MIC :
3 Flora:V.anguillarum MIC:2.79µg/ml (0.998461µM) Method:MIC :
4 Flora:S.typhimurium MIC:11.18µg/ml (4.001µM) Method:MIC :
5 Flora:B.subtilis MIC:5.59µg/ml (2.0005µM) Method:MIC :
6 Flora:L.ivanovii MIC:11.18µg/ml (4.001µM) Method:MIC :
我正在尝试使用 beautifulsoup 的不同方法,因为我在使用 selenium 时遇到了太多困难。我尝试过的不同方法:
import requests
from bs4 import BeautifulSoup as bs
html_page = urlopen('http://biotechlab.fudan.edu.cn/database/lamp/detail.php?id=L01A003388')
soup = bs(html_page)
#method 1
li = soup.select('ul')
print(li)
#method 2
for ultag in soup.find_all('ul',{'class':"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active"}):
for litag in ultag.find_all('li'):
print(litag.text)
#method 3
for ul in soup.findAll('ul', class_="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active"):
for link in ul.findAll('a'):
print(link.text)
方法 1 打印所有 UL,而我只希望以更好的格式返回这部分:
<ul><li><strong> Antibacterial Activities</strong></li><li> 1 Flora:E.coli MIC:5.59µg/ml (2.0005µM) Method:MIC :</li><li> 2 Flora:A.salmonicida subsp salmonicida MIC:11.18µg/ml (4.001µM) Method:MIC :</li><li> 3 Flora:V.anguillarum MIC:2.79µg/ml (0.998461µM) Method:MIC :</li><li> 4 Flora:S.typhimurium MIC:11.18µg/ml (4.001µM) Method:MIC :</li><li> 5 Flora:B.subtilis MIC:5.59µg/ml (2.0005µM) Method:MIC :</li><li> 6 Flora:L.ivanovii MIC:11.18µg/ml (4.001µM) Method:MIC :</li></ul>
方法 2 和方法 3 都只是返回打印到屏幕上的“soup = bs(html_page)”。
如果有人可以告诉我哪里出了问题/如何提取感兴趣的数据,我将不胜感激。顺便说一句,我只是在学习,我最初尝试用 Selenium 来做到这一点,但我对此很挣扎,这就是我转向 beautifulsoup 的原因。
最佳答案
在 bs4 4.7.1+ 中,您可以使用 :contains
来定位 Activity
选项卡并使用 adjacent sibling combinator获取下一个 div
和 type selector与 descendant combinator获取子li
。我使用 re
对输出进行一些字符串清理。
import requests,re
from bs4 import BeautifulSoup as bs
r = requests.get('http://biotechlab.fudan.edu.cn/database/lamp/detail.php?id=L01A003388')
soup = bs(r.content, 'lxml')
items = [re.sub('(\xa0)+',' ',i.text.strip()) for i in soup.select('h3:contains(Activity) + div li')]
print(items)
<小时/>
输出:
关于Python与美汤: Extract data from a specific set of list in unordered list category,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873610/
日前,阿里数娱发布了新一代互联网机顶盒天猫魔盒3pro,今天已正式首发开卖,售价299元。 现在,我们已经拿到这款产品,下面为大家带来图赏。 外观方面,天猫魔盒3pro更加小巧轻薄,采用经典的黑
我是一名优秀的程序员,十分优秀!