python - 如何使用 bs4 在没有任何标签的情况下在网络上获取文本?
问题描述
这是数据结构
<div class = 'xxx' id = 'yyy'>
<div class id = 'zzz' class = 'kkk'>
<script type = 'bbb'>
// noise word
</script>
<strong class = '111'>...</strong>
<span class = '222'>...</span>
<br>
### target data
<br>
### target data2
<br>
### target data 3
<a href="http://news.khan.co.kr/kh_cartoon/?utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 장도리 | 그림마당 보기</a><br/><a href="http://www.khan.co.kr/?utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 경향신문 바로가기</a><a href="http://smile.khan.co.kr/gudoc/gudoc_input_step3.html?media_cd=201&utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 경향신문 구독신청하기</a><br/><br/>©경향신문(www.khan.co.kr), 무단전재 및 재배포 금지<br/><br/>
<!-- // 본문 내용 -->
</div>
... etc
我只想获取目标数据。我使用 bs4 获取 html 中的单词数据。
下面是我获取消息的源代码
soup.find_all('div',{'id':'yyy'})
但它返回了许多噪声数据。
我怎样才能只使用 bs4 和 selenium 获取目标数据?
下面是我的解析源代码
def crwaling_article(self,url):
"""
Parameters
----------
url : List
Article URL to get data.
Returns : DataFrame
Article Description Data Frame
-------
None.
"""
chrome_driver = webdriver.Chrome('D:/바탕 화면/인턴/python/crawling_software/crwaler/news_crwaling/chromedriver.exe')
chrome_driver.get(url)
html = chrome_driver.page_source
soup = BeautifulSoup(html , 'html.parser')
title = soup.find('div',{'class':'article_info'}).find('h3',{'id':'articleTitle'}).get_text()
date = soup.find('div', {'class':'article_info'}).find('span',{'class':'t11'}).get_text()
article = soup.find_all('div',{'id':'articleBodyContents'})
chrome_driver.quit()
self.set_title(title)
self.set_date(date)
解决方案
我认为删除所有子标签会起作用。看一看:
data = """<div class='xxx' id = 'yyy'>
<div class id = 'zzz' class='kkk'>
<script type = 'bbb'>
// noise word
</script>
<strong class = '111'>...</strong>
<span class = '222'>...</span>
<br>
### target data
<br>
### target data2
<br>
### target data 3
<a href="http://news.khan.co.kr/kh_cartoon/?utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 장도리 | 그림마당 보기</a><br/><a href="http://www.khan.co.kr/?utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 경향신문 바로가기</a><a href="http://smile.khan.co.kr/gudoc/gudoc_input_step3.html?media_cd=201&utm_source=naver&utm_medium=news_bottom_outlink" target="_blank">▶ 경향신문 구독신청하기</a><br/><br/>©경향신문(www.khan.co.kr), 무단전재 및 재배포 금지<br/><br/>
<!-- // 본문 내용 -->
</div>
</div>
"""
from bs4 import BeautifulSoup
if __name__ == '__main__':
soup = BeautifulSoup(data, 'html.parser')
for tag in soup.find('div', {'id': 'yyy'}).find_all(): # this loop delete all sub tags.
if not tag.find_all(): # no sub tag
tag.decompose()
print(soup.text.strip())
输出:
### target data
### target data2
### target data 3
©경향신문(www.khan.co.kr), 무단전재 및 재배포 금지
推荐阅读
- javascript - Ui Bootstrap(angularjs)sidenav 无法按预期工作
- jquery - 在ios设备cordova上禁用启动画面
- android - 奇怪的路径更改和忘记的文件关联
- swift - 可观察的订阅总是一次发布
- javascript - 如何自定义nuxt默认html模板
- mysql - 在 MySQL 表中查找重复行
- microsoft-graph-api - Microsoft Graph API - 文件邀请端点突然无法正常工作
- runtime-error - 解析时调用失败错误
- java - LeanFT & Java:在 Docker 容器中运行测试
- ms-access - 如何以编程方式在组合框中选择一个值?