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 相关文章推荐
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
python 梯度法求解函数极值的实例
Jul 10 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
Python数据分析之pandas读取数据
Jun 02 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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项目中比较通用的php自建函数的详解
2013/06/06 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python numpy 按行归一化的实例
2019/01/21 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Python datetime 如何处理时区信息
2020/09/02 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
Servlet方面面试题
2016/09/28 面试题
师范毕业生个人求职信
2013/12/09 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
学校读书活动总结
2014/06/30 职场文书
2015年质检工作总结
2015/05/04 职场文书
Java spring定时任务详解
2021/10/05 Java/Android