做网站主色调选择,肇庆企业免费建站,做废钢推广网站,wordpress百度云盘一、BeautifulSoup使用步骤
BeautifulSoup 是一个用于从 HTML 或 XML 文件中提取数据的 Python 库。以下是如何使用 BeautifulSoup 来解析 HTML 并提取信息的基本步骤#xff1a;
1、安装#xff1a;
如果你还没有安装 BeautifulSoup#xff0c;你可以使用 pip 来安装它。…一、BeautifulSoup使用步骤
BeautifulSoup 是一个用于从 HTML 或 XML 文件中提取数据的 Python 库。以下是如何使用 BeautifulSoup 来解析 HTML 并提取信息的基本步骤
1、安装
如果你还没有安装 BeautifulSoup你可以使用 pip 来安装它。BeautifulSoup 通常与 lxml 或 html.parser 这样的解析器一起使用但 lxml 通常提供更快的解析和更全面的功能。
pip install beautifulsoup4 lxml2、导入库
在你的 Python 脚本中你需要导入 BeautifulSoup 和一个解析器。
from bs4 import BeautifulSoup
import requests注意这里我也导入了 requests 库它用于从网络获取 HTML 内容。如果你已经有了 HTML 内容你可以直接用它来创建 BeautifulSoup 对象。 3、获取 HTML 内容
使用 requests 库从网页获取 HTML 内容。
url http://example.com
response requests.get(url)
response.raise_for_status() # 如果请求失败这会抛出一个异常
html_content response.text4、解析 HTML
使用 BeautifulSoup 和解析器来解析 HTML 内容。
soup BeautifulSoup(html_content, lxml)5、提取数据
使用 BeautifulSoup 的各种方法和选择器来提取你感兴趣的数据。例如使用 .find() 或 .find_all() 方法来查找标签并使用 .get_text() 方法来获取标签内的文本。
# 查找所有的段落标签 p
paragraphs soup.find_all(p)# 打印每个段落的文本内容
for paragraph in paragraphs:print(paragraph.get_text())# 查找具有特定类名的标签
divs_with_class soup.find_all(div, class_some-class)# 使用 CSS 选择器查找元素
links soup.select(a[href]) # 查找所有带有 href 属性的 a 标签6、处理属性
你也可以获取和处理 HTML 标签的属性。例如要获取一个链接的 href 属性你可以这样做
for link in soup.find_all(a):print(link.get(href))7、清理和关闭
在处理完 HTML 后你可能想要关闭任何打开的文件或连接尽管在使用 requests 和 BeautifulSoup 时通常不需要手动关闭它们。但是如果你的脚本涉及其他资源请确保正确关闭它们。
8、注意事项
尊重网站的 robots.txt 文件和版权规定。不要过度请求网站以免对其造成负担。考虑使用异步请求或线程/进程池来加速多个请求的处理。使用错误处理和重试逻辑来处理网络请求中的常见问题。
二、示例1抓取百度百科数据
1抓取百度百科《青春有你第三季》数据
抓取链接是https://baike.baidu.com/item/青春有你第三季?fromModulelemma_search-box#4-3
import json
from bs4 import BeautifulSoup
import requestsheaders {accept-language: zh-CN,zh;q0.9,en;q0.8,en-GB;q0.7,en-US;q0.6,cache-control: max-age0
}def getAllUsers():url https://baike.baidu.com/item/%E9%9D%92%E6%98%A5%E6%9C%89%E4%BD%A0%E7%AC%AC%E4%B8%89%E5%AD%A3?fromModulelemma_search-box#4-3response requests.get(url, headersheaders)response.raise_for_status() # 如果请求失败这会抛出一个异常html_content response.textsoup BeautifulSoup(html_content, lxml)trs soup.find(div, attrs{data-uuid: go12lpqgpn}).find_all(nametr)listUser []for tr in trs[1:]:tds tr.find_all(td)name tds[0].find(a).get_text()head_href tds[0].find(a).attrs[href]head_id head_href.split(/)[3].split(?)[0]provice tds[1].find(span).get_text()height tds[2].find(span).get_text()weight tds[3].find(span).get_text()company tds[4].find(span).get_text()user {name: name, head_id: head_id, provice: provice, height: height, weight: weight,company: company}listUser.append(user)print(listUser)return listUserif __name__ __main__:listUser getAllUsers()with open(user.json, w, encodingutf-8) as f:json.dump(listUser, f, ensure_asciiFalse, indent4)
大致结果数据如下
[{name: 爱尔法·金,head_id: 55898952,provice: 中国新疆,height: 184cm,weight: 65kg,company: 快享星合},{name: 艾克里里,head_id: 19441668,provice: 中国广东,height: 174cm,weight: 55kg,company: 领优经纪},{name: 艾力扎提,head_id: 55898954,provice: 中国新疆,height: 178cm,weight: 56kg,company: 简单快乐},// ...
]
2图表展示抓取到的数据
import pandas as pd
import matplotlib.pyplot as pltdf pd.read_json(user.json)province_counts df[provice].value_counts().reset_index()
province_counts.columns [provice, count]
print(province_counts)# 设置字体为支持中文的字体比如SimHei黑体确保你的系统中安装了该字体
plt.rcParams[font.sans-serif] [SimHei] # 用于正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# # 创建一个尺寸为 16x10 英寸、分辨率为 200dpi 的图形窗口
plt.figure(figsize(16, 10), dpi200)
plt.bar(province_counts[provice], province_counts[count])
plt.title(每个省份的人数)
plt.xlabel(省份)
plt.ylabel(人数)
plt.xticks(rotation45) # 如果省份名称过长可以旋转x轴标签以便更好地显示
plt.show()打印如下数据 provice count
0 中国广东 14
1 中国江苏 9
2 中国山东 8
3 中国浙江 7
4 中国辽宁 7
5 中国湖南 6
6 中国四川 5
7 中国北京 5
8 中国贵州 5
9 中国河南 5
10 中国湖北 4
11 中国河北 4
12 中国重庆 3
13 中国内蒙古 3
14 中国新疆 3
15 中国安徽 3
16 中国黑龙江 2
17 中国江西 2
18 中国上海 2
19 加拿大 2
20 中国台湾 2
21 中国澳门 2
22 中国吉林 2
23 中国天津 2
24 美国 2
25 中国广西 1
26 中国甘肃 1
27 中国 1
28 中国哈尔滨 1
29 日本 1
30 中国宁夏 1
31 马来西亚 1
32 中国福建 1
33 中国云南 1
34 中国山西 1输出图表
参考
https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/https://requests.readthedocs.io/projects/cn/zh-cn/latest/