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语言的优雅之处
Jul 04 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
pybind11和numpy进行交互的方法
Jul 04 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
简化Python的Django框架代码的一些示例
2015/04/20 Python
Python之reload流程实例代码解析
2018/01/29 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
Python文件路径名的操作方法
2019/10/30 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
html5与css3小应用
2013/04/03 HTML / CSS
售后服务科岗位职责范文
2013/11/13 职场文书
高中军训感想800字
2014/02/23 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js