Bootstrap

python爬虫基础-----BeatuifulSoup

Python 爬虫(Web Scraping)是指通过编写 Python 程序从互联网上自动提取信息的过程。

爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。

Python 的丰富生态使其成为开发爬虫的热门语言,特别是由于其强大的库支持。

一般来说,爬虫的流程可以分为以下几个步骤:

  • 发送 HTTP 请求:爬虫通过 HTTP 请求从目标网站获取 HTML 页面,常用的库包括 requests
  • 解析 HTML 内容:获取 HTML 页面后,爬虫需要解析内容并提取数据,常用的库有 BeautifulSouplxmlScrapy 等。
  • 提取数据:通过定位 HTML 元素(如标签、属性、类名等)来提取所需的数据。
  • 存储数据:将提取的数据存储到数据库、CSV 文件、JSON 文件等格式中,以便后续使用或分析。

BeatuifulSoup

BeautifulSoup,它是一个用于解析 HTML 和 XML 文档的 Python 库,能够从网页中提取数据,常用于网页抓取和数据挖掘。最好安装lxml作为解析器(更快的速度)

通常搭配requests库来获取网页内容:

示例:获取网页标题

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = 'http://baidu.com/'  # 抓取baidu搜索引擎的网页内容

# 设置请求头,发送HTTP请求获取网页内容
headers = {
        'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
    }
response = requests.get(url,headers=headers)
# 中文乱码问题
response.encoding = 'utf-8'
# 确保请求成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'lxml')

    # 查找<title>标签
    title_tag = soup.find('title')

    # 打印标题文本
    if title_tag:
        print(title_tag.get_text())
    else:
        print("未找到<title>标签")
else:
    print("请求失败,状态码:", response.status_code)

BeautifulSoup 提供了多种方法来查找网页中的标签,最常用的包括 find() 和 find_all()。

  • find() 返回第一个匹配的标签
  • find_all() 返回所有匹配的标签
from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = 'https://www.baidu.com/' # 抓取baidu搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = 'utf-8'

soup = BeautifulSoup(response.text, 'lxml')

# 查找第一个 <a> 标签
first_link = soup.find('a')
print(first_link)
print("----------------------------")    #分割,方便观看

# 获取第一个 <a> 标签的 href 属性
first_link_url = first_link.get('href')
print(first_link_url)
print("----------------------------")

# 查找所有 <a> 标签
all_links = soup.find_all('a')
print(all_links)

get_text    提取标签的文本内容:

# 获取第一个 <p> 标签中的文本内容
paragraph_text = soup.find('p').get_text()


# 获取页面中所有文本内容
all_text = soup.get_text()

数据保存

示例获取电影平台中的数据

import csv

# 将数据写入 CSV 文件
with open("movies.csv", mode="w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["标题", "评分", "简短评价"])
    for movie in movies:
        title = movie.find("span", class_="title").text
        rating = movie.find("span", class_="rating_num").text
        description = movie.find("span", class_="inq")
        description = description.text if description else "无简评"
        # 如果找到了简短评价(即 `description` 不为 `None`),则获取其 `.text` 属性(文本内容)。
        # 如果没有简短评价(即 `description` 为 `None`),则赋值为 `"无简评"` 作为默认值。
        writer.writerow([title, rating, description])
        # 使用 `writer.writerow()` 方法将每部电影的数据(标题、评分、简短评价)写入 CSV 文件。
        # 每次写入一个电影的信息作为一行。

BeautifulSoup 是一个功能强大的网页解析库,广泛应用于数据抓取和网页解析。通过 find()find_all() 和 CSS 选择器等方法,你可以灵活地从 HTML 文档中提取所需的信息。为了避免爬虫被封锁,记得设置适当的请求头并遵守网站的爬取规则。

;