Python BeautifulSoup数据挖掘技巧

2023-04-17 00:00:00 python 技巧 数据挖掘
  1. 抓取网页数据

使用Python的requests库可以方便地抓取网页数据,将数据存储为response对象。可以使用res.content或res.text方法来获取网页的源代码。

import requests
res = requests.get('https://pidancode.com/')
html = res.text
  1. 解析网页数据

使用Python的BeautifulSoup库可以解析网页数据,提取所需的信息。可以使用soup.find()或soup.find_all()方法来查找特定的标签和属性。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('title')
print(title.text)  # 输出网页标题
  1. 使用CSS选择器查找元素

使用CSS选择器可以更精确的查找元素。可以使用soup.select()方法来查找元素。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
title = soup.select('title')[0]
print(title.text)  # 输出网页标题
  1. 获取标签的属性值

可以使用tag.attrs['属性名']方法获取标签的属性值。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
a_tag = soup.find('a')
print(a_tag.attrs['href'])  # 输出a标签的href属性值
  1. 获取标签的文本内容

可以使用tag.text或tag.string方法获取标签的文本内容。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
a_tag = soup.find('a')
print(a_tag.text)  # 输出a标签的文本内容
  1. 过滤器

使用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标签
  1. 处理动态页面

有些网站使用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')
  1. 处理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'])  # 输出所有文章的标题

相关文章