Python如何使用BeautifulSoup爬取网页信息


Posted in Python onNovember 26, 2019

这篇文章主要介绍了Python如何使用BeautifulSoup爬取网页信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

简单爬取网页信息的思路一般是

1、查看网页源码

2、抓取网页信息

3、解析网页内容

4、储存到文件

现在使用BeautifulSoup解析库来爬取刺猬实习Python岗位薪资情况

一、查看网页源码

Python如何使用BeautifulSoup爬取网页信息

这部分是我们需要的内容,对应的源码为:

Python如何使用BeautifulSoup爬取网页信息

分析源码,可以得知:

1、岗位信息列表在<section class="widget-job-list">中

2、每条信息在<article class="widget item">中

3、对于每条信息,我们需要提取出的内容是 公司名称,职位, 薪资

二、抓取网页信息

使用request.get()抓取,返回的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)

六、运行结果

Python如何使用BeautifulSoup爬取网页信息

七、完整代码

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 相关文章推荐
Python三元运算实现方法
Jan 12 Python
Python通过future处理并发问题
Oct 17 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python装饰器用法实例总结
Feb 07 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
python使用递归的方式建立二叉树
Jul 03 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
python interpolate插值实例
Jul 06 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 #Python
Python实现图片添加文字
Nov 26 #Python
从numpy数组中取出满足条件的元素示例
Nov 26 #Python
python实现图片上添加图片
Nov 26 #Python
numpy:找到指定元素的索引示例
Nov 26 #Python
python中seaborn包常用图形使用详解
Nov 25 #Python
解决python中的幂函数、指数函数问题
Nov 25 #Python
You might like
天津市收音机工业发展史
2021/03/04 无线电
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
浅析vue数据绑定
2017/01/17 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
python海龟绘图实例教程
2014/07/24 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
python图书管理系统
2020/04/05 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
WxPython建立批量录入框窗口
2019/02/27 Python
pycharm显示远程图片的实现
2019/11/04 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
小学毕业感言150字
2014/02/05 职场文书
党员领导干部承诺书
2014/05/28 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
Python OpenCV超详细讲解基本功能
2022/04/02 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL