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进行TCP网络编程的教程
Apr 29 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python 性能优化方法小结
Mar 31 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
python机器学习实现决策树
Nov 11 Python
python通过opencv调用摄像头操作实例分析
Jun 07 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
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
篮球赛闭幕式主持词
2015/07/03 职场文书
赞助商致辞
2015/07/30 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android