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 10 Python
python append、extend与insert的区别
Oct 13 Python
Python 性能优化技巧总结
Nov 01 Python
Django自定义认证方式用法示例
Jun 23 Python
python基本语法练习实例
Sep 19 Python
python主线程捕获子线程的方法
Jun 17 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
python随机数分布random均匀分布实例
Nov 27 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 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 form 表单传参明细研究
2009/07/17 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
php pdo操作数据库示例
2017/03/10 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python得到单词模式的示例
2018/10/15 Python
python3实现名片管理系统
2020/11/29 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
教师应聘个人求职信
2013/12/10 职场文书
网络编辑求职信
2014/04/30 职场文书
飞屋环游记观后感
2015/06/08 职场文书
Python中for后接else的语法使用
2021/05/18 Python