python - BeautifulSoup - 查找并提取标题/H1 之后和 H2 之前的所有文本
问题描述
所以我正在制作一个在谷歌上运行的刮板,并使用我输入的关键字抓取第一个链接。然后它将抓取该网站上的文章并将其保存到 .csv 文件中。
我让刮刀成功地抓取了每个 H2 标题和每个 H2 之间的文本。
但是,H1/Title 后面很少有 P 标签,所以我不能像对 H2 那样做以下事情:
for header in soup.find_all('h2'):
nextNode = header
h2list.append(nextNode.text)
f = open(f"{query}-h2-{h2}.txt","w+")
while True:
nextNode = nextNode.nextSibling
if nextNode.name == "h2":
#do something
if nextNode.name == "p":
#do something
我的工作是:
for div in soup.find_all('div'):
for child in div:
if child is not None:
if child.name == 'p':
#do something
if child.name == 'h2':
break
但问题是发现很多随机文本不在标题之后和下一个 H2 之前,例如侧边栏文本等......
有没有更有效的方法来获取标题之后和 H2 之前的文本,而不获取文章正文中没有的其他随机内容?
PS:这是针对不同网站的,必须是通用的,所以我不能使用soup.find by ID 或 CLASS
解决方案
推荐阅读
- file - NFS 或 SSHFS:如何禁用客户端写入服务器?
- python - 在Python中被视为全局变量的自由变量?
- c# - 不能在 NSSet 中使用类
- google-cloud-platform - 即使在运行状况检查通过后,GCP 负载平衡器也会返回 404
- python - 如何使用 urllib2.urlopen() 获取 url 重定向状态?
- jquery - SVG stroke-dashoffset 动画在点击时开始(再次)
- amazon-web-services - 如何将用户的操作记录保存到 DynamoDB?
- spring-boot - 何时提交事务(默认情况下)?
- apache-kafka - Kafka 用于微服务的事件溯源
- java - 如何测试/模拟和通过 CRUDRepository 生成的 API Rest?