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自动安装pip
Apr 24 Python
python实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
python占位符输入方式实例
May 27 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
Python PIL按比例裁剪图片
May 11 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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下将XML转换为数组
2010/01/01 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
jquery ready函数源代码研究
2009/12/06 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
理解javascript闭包
2015/12/15 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
深入浅析Python传值与传址
2018/07/10 Python
利用python画出折线图
2018/07/26 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python 没有main函数的原因
2020/07/10 Python
语文教研活动总结
2014/07/02 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
房屋质量投诉书
2015/07/02 职场文书
申请吧主发表的感言
2015/08/03 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL