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的Flask框架中使用模版的入门教程
Apr 20 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python闭包和装饰器用法实例详解
May 22 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
python第三方库学习笔记
Feb 07 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python基础之常用库常用方法整理
Apr 30 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之第三天
2006/10/09 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
Python 创建空的list,以及append用法讲解
2018/05/04 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
中英文求职信范文
2015/03/19 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
转学证明范本
2015/06/19 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers