Python使用BeautifulSoup爬取网页信息的完整流程与代码实现

栗子
栗子
发布时间:2026-10-13 | 3人浏览过
原创

本文详细介绍利用Python和Beautiful库进行网页数据爬取的完整流程。内容涵盖查看网页源码、使用requests获取HTML、通过BeautifulSoup解析特定标签提取公司名称、职位及薪资信息,并将结果追加存储至CSV文件。此外,文章还演示了如何通过循环处理URL中的页码参数,实现多页数据的批量抓取与保存。

本文深入解析如何利用Python结合BeautifulSoup库高效爬取网页数据,通过详细的示例代码展示具体操作步骤,为相关学习与工作提供具有实际价值的参考指南。

网页爬取基本流程

实现网页信息的基础爬取通常遵循以下逻辑步骤:

首先,需要查看目标网页的源代码结构。

其次,利用网络请求库抓取网页内容。

接着,对获取的HTML内容进行结构化解析。

最后,将解析得到的数据保存至本地文件。

接下来,我们将以刺猬实习网站中Python岗位的薪资信息为例,演示如何使用BeautifulSoup解析库完成上述爬取任务。

源码分析与数据定位

第一步:分析网页源码结构

我们需要关注的核心数据区域,其在HTML源码中的对应结构如下所示:

通过对源码结构的分析,我们可以得出以下关键信息:

1、所有岗位信息的列表包裹在带有class属性为“widget-job-list”的<section>标签内。

2、每一条具体的岗位信息被包含在带有class属性为“widget item”的<article>标签中。

3、针对每条岗位信息,我们需要提取的关键字段包括:公司名称、职位名称以及薪资范围。

第二步:抓取网页原始数据

使用requests库的get()方法发起请求并获取网页,随后将返回的文本内容传入BeautifulSoup进行解析,生成soup对象以便后续处理。

网页抓取与解析实现


def get_one_page(url):
  response = requests.get(url)
  soup = BeautifulSoup(response.text, "html.parser")
  return soup

第三步:解析网页内容并提取数据

1、定位到起始标签<section>,找到包含岗位列表的区域。

2、在<article>标签范围内,逐一匹配并提取各项具体信息。

3、将提取到的数据整理为列表格式,以便后续存储。


def parse_page(soup):
  #待存储的信息列表
  return_list = []
  #起始位置
  grid = soup.find('section', attrs={"class": "widget-job-list"})
  if grid:
    #找到所有的岗位列表
    job_list = soup.find_all('article', attrs={"class": "widget item"})

    #匹配各项内容
    for job in job_list:
      #find()是寻找第一个符合的标签
      company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回类型为string,用strip()可以去除空白符,换行符
      title = job.find('code').get_text()
      salary = job.find('span', attrs={"class": "color-3"}).get_text()
      #将信息存到列表中并返回
      return_list.append(company + " " + title + " " + salary)
  return return_list

第四步:将数据存储到文件

将处理好的列表数据写入名为shixi.csv的文件中,确保数据持久化保存。

数据存储与多页爬取逻辑


def write_to_file(content):
  #以追加的方式打开,设置编码格式防止乱码
  with open("shixi.csv", "a", encoding="gb18030")as f:
    f.write("\n".join(content))

第五步:实现多页信息爬取

观察网页URL结构可以发现,末尾的page参数代表了当前的页数信息。

因此,在main函数中接收page参数,并通过循环调用main(page)函数,即可实现多页数据的连续爬取。


def main(page):
  url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page)
  soup = get_one_page(url)
  return_list = parse_page(soup)
  write_to_file(return_list)
if __name__ == "__main__":
  for i in range(4):
    main(i)

第六步:查看运行结果

第七步:完整代码示例

完整代码汇总


import requests
import re
from bs4 import BeautifulSoup

def get_one_page(url):
  response = requests.get(url)
  soup = BeautifulSoup(response.text, "html.parser")
  return soup

def parse_page(soup):
  #待存储的信息列表
  return_list = []
  #起始位置
  grid = soup.find('section', attrs={"class": "widget-job-list"})
  if grid:
    #找到所有的岗位列表
    job_list = soup.find_all('article', attrs={"class": "widget item"})

    #匹配各项内容
    for job in job_list:
      #find()是寻找第一个符合的标签
      company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回类型为string,用strip()可以去除空白符,换行符
      title = job.find('code').get_text()
      salary = job.find('span', attrs={"class": "color-3"}).get_text()
      #将信息存到列表中并返回
      return_list.append(company + " " + title + " " + salary)
  return return_list

def write_to_file(content):
  #以追加的方式打开,设置编码格式防止乱码
  with open("shixi.csv", "a", encoding="gb18030")as f:
    f.write("\n".join(content))
def main(page):
  url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page)
  soup = get_one_page(url)
  return_list = parse_page(soup)
  write_to_file(return_list)
if __name__ == "__main__":
  for i in range(4):
    main(i)

以上即为本文的全部内容,希望这些示例代码能对您的学习和工作有所帮助,欢迎继续支持本站获取更多技术资源。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表