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检测网页是否有日常链接
Jun 03 Python
python字典键值对的添加和遍历方法
Sep 11 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python创建或生成列表的操作方法
Jun 19 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
python多进程使用函数封装实例
May 02 Python
Python字典取键、值对的方法步骤
Sep 30 Python
Django restful framework生成API文档过程详解
Nov 12 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
转PHP手册及PHP编程标准
2006/12/17 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
js单例模式详解实例
2013/11/21 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
Angular脚手架开发的实现步骤
2019/04/09 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python实现将xml导入至excel
2015/11/20 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Python Django view 两种return的实现方式
2020/03/16 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
什么是会话Bean
2015/05/14 面试题
精神文明单位申报材料
2014/05/02 职场文书
跳槽求职信范文
2014/05/26 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
施工安全员岗位职责
2015/04/11 职场文书
监护人证明
2015/06/19 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript