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 19 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
书单|人生苦短,你还不用python!
Dec 29 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
python numpy 按行归一化的实例
Jan 21 Python
详解Python中is和==的区别
Mar 21 Python
python设置代理和添加镜像源的方法
Feb 14 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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多维数组指定多字段排序的示例代码
2018/05/16 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
Javascript - HTML的request类
2007/01/09 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
浅析Python基础-流程控制
2016/03/18 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
基于python实现坦克大战游戏
2020/10/27 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
投标承诺书怎么写
2014/05/24 职场文书
本科应届生求职信
2014/08/05 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
任命书标准格式
2015/03/02 职场文书
董事长开业致辞
2015/07/29 职场文书
厉行节约工作总结
2015/08/12 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python