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实现删除文件与目录的方法
Nov 10 Python
浅谈MySQL中的触发器
May 05 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
python使用fork实现守护进程的方法
Nov 16 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python的pip安装以及使用教程
Sep 18 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
python模拟点击网页按钮实现方法
Feb 25 Python
Python基于内置函数type创建新类型
Oct 22 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
Python中的Django基本命令实例详解
2018/07/15 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
学习python需要有编程基础吗
2020/06/02 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
车辆安全检查制度
2014/01/12 职场文书
伊索寓言教学反思
2014/05/01 职场文书
计生工作先进事迹
2014/08/15 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
临时用工协议书范本
2014/10/29 职场文书
公务员政审材料
2014/12/23 职场文书
消费者理赔投诉书
2015/07/02 职场文书
七年级作文之游记
2019/12/11 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python