如何用Python3提取网页所有文字——以CBC网站地图为例
如何用Python3提取CBC站点地图页面中的所有文字?
嘿,要提取CBC站点地图里的各类文字(比如Arts、Books这类分类),用Python实现起来并不复杂。我一般会用requests库获取页面内容,再搭配BeautifulSoup来解析HTML,精准提取需要的文本。下面是具体的步骤和代码示例:
1. 先安装必要的依赖库
首先得确保你安装了requests(用来发送HTTP请求)和beautifulsoup4(用来解析HTML),打开终端执行以下命令:
pip install requests beautifulsoup4
2. 编写核心代码
下面的代码包含了两种提取方式:一种是提取页面所有可见文本,另一种是精准定位站点地图里的分类文字(更实用)。记得替换成CBC站点地图的真实URL哦:
import requests from bs4 import BeautifulSoup # 替换成CBC站点地图的实际URL sitemap_url = "这里替换成CBC Site Map的真实网址" # 模拟浏览器请求头,避免被网站拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } try: # 发送GET请求获取页面内容 response = requests.get(sitemap_url, headers=headers) response.raise_for_status() # 如果请求返回错误状态码,直接抛出异常 # 用BeautifulSoup解析HTML内容 soup = BeautifulSoup(response.text, "html.parser") # 方法一:提取页面所有可见文本(会包含导航、页脚等所有文字) full_page_text = soup.get_text(strip=True, separator="\n") print("=== 页面所有文字 ===") print(full_page_text) # 方法二:精准提取站点地图的分类文字(更推荐) # 先打开CBC站点地图页面,按F12打开开发者工具,找到分类所在的HTML标签 # 比如假设分类都在class为"sitemap-category"的<li>标签里,就用下面的选择器 # 你需要根据实际页面结构调整这个CSS选择器 sitemap_categories = soup.select("li.sitemap-category a") print("\n=== 精准提取的站点地图分类 ===") for category in sitemap_categories: print(category.get_text(strip=True)) except requests.exceptions.RequestException as e: print(f"请求过程中出错了:{e}")
一些关键说明
- 请求头的作用:很多网站会拦截没有浏览器标识的请求,所以加上
User-Agent模拟真实浏览器访问,能减少被拦截的概率。 - 精准提取的技巧:如果只想要站点地图里的分类(比如Arts、Books),不要直接提取所有文本,而是先通过浏览器开发者工具查看这些分类对应的HTML标签和类名,调整代码里的CSS选择器(比如
soup.select()里的参数),这样能拿到更干净的结果。 - XML站点地图的情况:如果CBC的站点地图是XML格式(比如
/sitemap.xml),那解析时要把BeautifulSoup的解析器改成"xml",然后提取对应XML标签的内容即可。 - 遵守网站规则:不要频繁发送请求,避免给服务器造成压力,同时注意查看网站的
robots.txt文件,确认是否允许爬取站点地图。
内容的提问来源于stack exchange,提问作者Naghmeh Fotowat
相关产品推荐
相关产品推荐

