在Python中,使用BeautifulSoup库(bs4)结合正则表达式可以过滤出网页正文内容。以下是一个示例代码,展示了如何过滤出包含中文字符最多的div,从而确定网页正文:
```python
import requests
from bs4 import BeautifulSoup
import re
定义一个函数来获取网页内容
def get_html_by_requests(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
session = requests.Session()
html_content = session.get(url=url, headers=headers).content.decode('utf-8', 'ignore')
return html_content
def count_content(string):
pattern = re.compile(u'[\u4e00-\u9fff]+')
content = pattern.findall(string)
return sum(len(c) for c in content)
定义一个函数来分析HTML内容,找到中文字数最多的div
def analyze_html(html):
soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all('div')
max_chinese_count = 0
main_div = None
for div in divs:
chinese_count = count_content(''.join(div.find_all(text=True, recursive=False)))
if chinese_count > max_chinese_count:
max_chinese_count = chinese_count
main_div = div
return main_div
使用示例
url = 'http://example.com' 替换为要抓取的网页URL
html_content = get_html_by_requests(url)
main_div = analyze_html(html_content)
if main_div:
print('找到的正文div内容:')
print(main_div.get_text())
else:
print('未找到包含正文的div')
这段代码首先定义了一个函数`get_html_by_requests`来获取网页内容,然后定义了一个函数`count_content`来统计字符串中的中文字符数。`analyze_html`函数使用BeautifulSoup解析HTML,找到所有div元素,并计算每个div中的中文字符数,最后返回中文字符数最多的div。
请注意,这个示例代码是基于网页结构相对简单,且正文内容在一个div中的情况。实际情况中,网页结构可能更为复杂,可能需要更复杂的逻辑来确定正文内容。此外,网页的编码和结构可能会影响代码的准确性,可能需要根据实际情况进行调整