【问题标题】:How to select all tags <b> HTML如何选择所有标签 <b> HTML
【发布时间】:2021-04-03 21:56:39
【问题描述】:
从这个webpage 我需要选择所有标签<b> </b> 和BeautifulSoup4。
url = "http://lib.ru/GrepSearch?Search=%E3%E5%F0%EE%E9+%ED%E0%F8%E5%E3%EE+%E2%F0%E5%EC%E5%ED%E8"
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
author = soup.select('b')
print(author)
我曾尝试使用find_all() 和select(),但在数组中使用时它们无法显示所有<b> 标签
【问题讨论】:
标签:
python
web-scraping
beautifulsoup
【解决方案1】:
这不一定是解析器问题,但无论如何,这个例子应该给你最初请求的书的作者和名称:
示例
import requests, re
from bs4 import BeautifulSoup
url = "http://lib.ru/GrepSearch?Search=%E3%E5%F0%EE%E9+%ED%E0%F8%E5%E3%EE+%E2%F0%E5%EC%E5%ED%E8"
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
[{"author":bTag.find_next('b').text, "name": bTag.find_next('ul').text.strip()} for bTag in soup.find_all(string='[dir] ')]
输出
[{'author': 'Джойс Кэри', 'name': 'Герой нашего времени'},
{'author': 'Михаил Юрьевич Лермонтов', 'name': 'Герой нашего времени'},
{'author': 'Владимир Маканин',
'name': 'Андеграунд, или Герой нашего времени'}]
【解决方案2】:
解析html文档时使用了不同的解析器,最常用的是'html.parser'。我在这里使用了 lxml,它同时使用 xml 和 html 来解析文档。
此处的代码应该为您提供您要求的原始输出(作者和书名)。您仍然需要对其进行处理才能获得所需的输出。
导入请求
从 bs4 导入 BeautifulSoup
requests = requests.get('http://lib.ru/GrepSearch?Search=history')
src = requests.content
汤= BeautifulSoup(src,'lxml')
b_tags = soup.find_all('b')
对于 b_tags 中的 b:
打印(b.文本)
输出如下: