前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Beautiful Soup的一些语法和爬虫的运用

Beautiful Soup的一些语法和爬虫的运用

作者头像
金鳞星溅
发布2023-04-27 14:59:18
4640
发布2023-04-27 14:59:18
举报

简介

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。 Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

一个简单案例

该案例使用Beautiful Soup简单爬取一个京东的网页数据

image-20230417200441849
image-20230417200441849

代码

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
import pandas as pd
import openpyxl

#请求网站,获取到网页资源
date=requests.get("https://search.jd.com/Search?keyword=%E4%BC%91%E9%97%B2%E9%9E%8B&enc=utf-8&wq=%E4%BC%91%E9%97%B2%E9%9E%8B&pvid=04a7485c9360491bbb049acec91927e4")
#对网页资源进行解析
soup=BeautifulSoup(date.content,"html.parser")
#对网页资源进行补全和格式化
soup.prettify()
#获取到单个商品的div
list=soup.find_all("div",class_="gl-i-wrap")


#新建一个数组,保存鞋子的信息
arr=[]
for i in list:
    #获取鞋子的名字
    list_name=(i.find_all("div",attrs={"class","p-name"}))[0].find_all("em")[0].get_text()
    #获取鞋子的价格
    list_price=(i.find_all("div",attrs={"class","p-price"}))[0].find_all("i")[0].get_text()
    #获取鞋子的图片链接
    list_img=(i.find_all("div",attrs={"class","p-img"}))[0].find_all("img")[0].get("data-lazy-img")
    #将获取到的信息添加到数组中
    arr.append([list_name,list_price,list_img])
 
#新建一个pandas的数据,并往其中填入arr数组的内容
excel=pd.DataFrame(arr,columns=["鞋名","价格","图片链接"])
#将pandas数据转化为Excel表格,并在本地保存
excel.to_excel("demo1.xlsx",sheet_name='demo1',index=False)

Excel文件

image-20230417200636635
image-20230417200636635

Beautiful Soup的一些语法

  • 获取标签的属性: soup.find("img").get("data-lazy-img")
  • 获取标签的内容: soup.find("img").get_text()
  • 获取所有的 div 标签: soup.find_all("div")
  • 获取所有的 div 标签(限定其属性): soup.find("div", attrs = {"class":"p-price"})
  • 查找一个元素: soup.find()
  • 查找一组元素: soup.find_all("div")
  • 将素组存为文件: pandas.DataFrame(_array).to_csv("./phone_info.csv")

tips: find和find_all方法的区别,find方法返回第一个匹配到的对象,而find_all返回所有匹配到的对象,是一个列表

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 一个简单案例
  • Beautiful Soup的一些语法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档