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实现2014火车票查询代码分享
Jan 10 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
python3实现逐字输出的方法
Jan 23 Python
python实现可逆简单的加密算法
Mar 22 Python
python用requests实现http请求代码实例
Oct 31 Python
Python线程指南分享
Nov 19 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
django在开发中取消外键约束的实现
May 20 Python
python 提高开发效率的5个小技巧
Oct 19 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 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
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
Position属性之relative用法
2015/12/14 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
django接入新浪微博OAuth的方法
2015/06/29 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
带你了解python装饰器
2017/06/15 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python实现验证码识别
2020/06/15 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
专业销售业务员求职信
2013/11/18 职场文书
女娲补天教学反思
2014/02/05 职场文书
运动会报道稿300字
2014/10/02 职场文书
在校证明模板
2015/06/17 职场文书
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
springboot读取resources下文件的方式详解
2022/06/21 Java/Android