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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
Django中的FBV和CBV用法详解
Sep 15 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python集合常见运算案例解析
Oct 17 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
解决pytorch读取自制数据集出现过的问题
May 31 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
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
初学Python函数的笔记整理
2015/04/07 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
django 模型字段设置默认值代码
2020/07/15 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
财务副总经理工作职责
2013/11/25 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
开学典礼决心书
2014/03/11 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android