我想获取所有具有“值”类的跨度文本.
然后,我需要使用文本的前9个字符来获取页面的在线ISSN.我不需要以“(print)”结尾的文本,但我确实需要以“(在线)结尾”的文本
例
<span class="bold">ISSN: </span>
<span class="value">0890-037X (Print)</span>
<span class="value">1550-2740 (Online)</span>
在这里,我需要获取“ 1550-2740”,因为它是在线ISSN.
我想我需要找到所有的跨度,检查类,然后检查文本.如果文字以“(在线)”结尾,那么我需要获取前9个字符.
我该怎么做呢?
先感谢您.
解决方法:
使用find_all提取元素.创建一个生成器(或列表,如果需要的话),它只是每个生成器的text属性.过滤掉不以“(Online)”结尾的那些,并对其进行切片以仅提取ISBN.我已经使用了生成器和next()来获得第一次出现,但是如果您想全部使用(如果有多个),则可以使用列表.
希望这适用于整个文件!
soup = BeautifulSoup(open("p.html").read(), "lxml")
txt = (t.text for t in soup.find_all("span", class_="value"))
isbn = next(t[:9] for t in txt if t.endswith("(Online)"))
这表示isbn为“ 1550-2740”.