Python BeautifulSoup数据挖掘技巧
- 抓取网页数据
使用Python的requests库可以方便地抓取网页数据,将数据存储为response对象。可以使用res.content或res.text方法来获取网页的源代码。
import requests res = requests.get('https://pidancode.com/') html = res.text
- 解析网页数据
使用Python的BeautifulSoup库可以解析网页数据,提取所需的信息。可以使用soup.find()或soup.find_all()方法来查找特定的标签和属性。
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') title = soup.find('title') print(title.text) # 输出网页标题
- 使用CSS选择器查找元素
使用CSS选择器可以更精确的查找元素。可以使用soup.select()方法来查找元素。
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') title = soup.select('title')[0] print(title.text) # 输出网页标题
- 获取标签的属性值
可以使用tag.attrs['属性名']方法获取标签的属性值。
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') a_tag = soup.find('a') print(a_tag.attrs['href']) # 输出a标签的href属性值
- 获取标签的文本内容
可以使用tag.text或tag.string方法获取标签的文本内容。
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') a_tag = soup.find('a') print(a_tag.text) # 输出a标签的文本内容
- 过滤器
使用BeautifulSoup的过滤器可以根据特定的规则筛选出所需的标签。可以使用lambda表达式或过滤器函数来定义过滤器。
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') def has_class_but_no_id(tag): return tag.has_attr('class') and not tag.has_attr('id') div_tags = soup.find_all(has_class_but_no_id) print(div_tags) # 输出所有有class属性但没有id属性的div标签
- 处理动态页面
有些网站使用JavaScript动态生成页面,此时抓取到的源代码并不包含所需的数据。可以使用Selenium和BeautifulSoup结合的方式来处理动态页面。
from selenium import webdriver from bs4 import BeautifulSoup driver = webdriver.Chrome() driver.get('https://pidancode.com/') html = driver.page_source soup = BeautifulSoup(html, 'html.parser')
- 处理JSON数据
有些网站返回的是JSON数据,可以使用Python的json库来处理。可以使用json.loads()方法将JSON字符串转为Python对象,使用json.dumps()方法将Python对象转为JSON字符串。
import requests import json res = requests.get('https://pidancode.com/api/posts') data = json.loads(res.text) for post in data['posts']: print(post['title']) # 输出所有文章的标题
相关文章