當(dāng)前位置:首頁(yè) > IT技術(shù) > 其他 > 正文

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑
2022-04-29 13:54:48


爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)挖掘


Hello,大家好我叫是Dream呀,一個(gè)有趣的Python博主,小白一枚,多多關(guān)照 ?

入門(mén)須知:這片樂(lè)園從不缺乏天才,努力才是你的最終入場(chǎng)券!

最后,愿我們都能在看不到的地方閃閃發(fā)光,一起加油進(jìn)步

“一萬(wàn)次悲傷,依然會(huì)有Dream,我一直在最溫暖的地方等你”,唱的就是我!哈哈哈~



??前言:??越來(lái)越發(fā)現(xiàn)學(xué)爬蟲(chóng)就像找女朋友一樣,慢慢來(lái),找到合適的機(jī)會(huì)才能拿下!讓我們來(lái)先把爬蟲(chóng)拿下吧!



爬蟲(chóng)BeautifulSoup模塊從入門(mén)到入坑

一、拿下她的必要準(zhǔn)備

1.構(gòu)建頁(yè)面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<ul>
<li id="l1">張三</li>
<li id="l2">李四</li>
<li>王五</li>
<a href="" id=""class="a1">尚硅谷</a>
<span>嘿嘿嘿</span>
</ul>
</div>

<a href="" title="a2">百度</a>
<div id="d1">
哈哈哈很牛哇
</div>
<p id="p1" class="p1">哈哈哈哈嘿嘿嘿</p>
</body>
</html>

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_python_02

2.知識(shí)儲(chǔ)備:

# -*-coding:utf-8 -*-
# @Author:到點(diǎn)了,心疼徐哥哥
# 奧利給干!??!
from bs4 import BeautifulSoup

# 通過(guò)解析本地文件 來(lái)將bs4基礎(chǔ)語(yǔ)法進(jìn)行講解
# 默認(rèn)打開(kāi)的文件的編碼格式為gbk 打開(kāi)文件時(shí)需要指定編碼
soup = BeautifulSoup(open('bs4基本使用.html',encoding='utf-8'),'lxml')
# print(soup)
# 根據(jù)標(biāo)簽名查找節(jié)點(diǎn)
# 找到的是第一個(gè)符合條件的數(shù)據(jù)
# print(soup.a)
# 獲取標(biāo)簽的屬性和屬性值
# print(soup.a.attrs)

# bs4的一些函數(shù)
# (1)find
# 返回的是第一個(gè)符合條件的數(shù)據(jù)
# print(soup.find('a'))
# 根據(jù)title的值來(lái)找到對(duì)應(yīng)的
# print(soup.find('a',title="a2")) # <a href="" title="a2">百度</a>
# print(soup.find('a',class="a1")) # class是關(guān)鍵字,不能用。相當(dāng)于古代皇帝叫這個(gè)名字,你不能用
# 根據(jù)class的值來(lái)找到對(duì)應(yīng)的標(biāo)簽對(duì)象,注意的是class需要添加下劃線
# print(soup.find('a',class_="a1")) # <a class="a1" href="" id="">尚硅谷</a>

# (2)find_all # 返回的是一個(gè)列表,并且返回所有的a標(biāo)簽
# print(soup.find_all('a'))# [<a class="a1" href="" id="">尚硅谷</a>, <a href="" title="a2">百度</a>]
# 如果想要獲取的是多個(gè)標(biāo)簽的數(shù)據(jù),那么需要在find_all的參數(shù)中添加的是列表的數(shù)據(jù)。
# print(soup.find_all(['a','span'])) # [<a class="a1" href="" id="">尚硅谷</a>, <span>嘿嘿嘿</span>, <a href="" title="a2">百度</a>]
# limit查找前幾個(gè)數(shù)據(jù)
# print(soup.find_all('li',limit=2)) # [<li>張三</li>, <li>李四</li>]

# (3)select(推薦)
# select方法返回列表和多個(gè)數(shù)據(jù)
# print(soup.select('a')) # [<a class="a1" href="" id="">尚硅谷</a>, <a href="" title="a2">百度</a>]
# 可以通過(guò).代表class 我們把這種操作叫做類(lèi)選擇器
# print(soup.select('.a1')) # [<a class="a1" href="" id="">尚硅谷</a>]
# print(soup.select('#l1')) # [<li id="l1">張三</li>]

# 屬性選擇器
# 查找li標(biāo)簽中有id的標(biāo)簽
# print(soup.select('li[id]')) # [<li id="l1">張三</li>, <li id="l2">李四</li>]
# 查找到li標(biāo)簽中id為l2的標(biāo)簽
# print(soup.select('li[id="l2"]')) # [<li id="l2">李四</li>]

# 層級(jí)選擇器
# 后代選擇器
# 找到的是div下面的li
# print(soup.select('div li')) # [<li id="l1">張三</li>, <li id="l2">李四</li>, <li>王五</li>]

# 子代選擇器
# 某標(biāo)簽的第一級(jí)子標(biāo)簽
# 注意:很多的計(jì)算機(jī)編程語(yǔ)言中。如果不加空格不會(huì)輸出內(nèi)容 但是bs4中 不會(huì)報(bào)錯(cuò) 會(huì)顯示內(nèi)容
# print(soup.select('div > ul > li')) # [<li id="l1">張三</li>, <li id="l2">李四</li>, <li>王五</li>]

# 找到a標(biāo)簽和li標(biāo)簽
# print(soup.select('a,li')) # [<li id="l1">張三</li>, <li id="l2">李四</li>, <li>王五</li>, <a class="a1" href="" id="">尚硅谷</a>, <a href="" title="a2">百度</a>]

# 節(jié)點(diǎn)信息
# 獲取節(jié)點(diǎn)內(nèi)容
# obj = soup.select('#d1')[0]
# 如果標(biāo)簽對(duì)象中 只有內(nèi)容 那么string和get_text()都可以使用
# 如果標(biāo)簽對(duì)象中 除了內(nèi)容還有標(biāo)簽 那么string就獲取不到數(shù)據(jù) 而get_text()是可以獲取數(shù)據(jù)
# 我們一般情況下 推薦使用get_text()
# print(obj.string)
# print(obj.get_text())

# 節(jié)點(diǎn)屬性
# obj = soup.select('#p1')[0]
# name是標(biāo)簽的名字
# print(obj.name)
# 將屬性值作為一個(gè)字典返回
# print(obj.attrs)

# 獲取節(jié)點(diǎn)的屬性
obj = soup.select('#p1')[0]
print(obj.attrs.get('class'))

二、冬天的第一杯星巴克送給你!

1.開(kāi)啟尋她之路

首先,進(jìn)入星巴克官網(wǎng):??星巴克??,然后進(jìn)入主頁(yè)的菜單界面,找到星巴克的一些種類(lèi)!

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)_03

2.找到我喜歡的那個(gè)她

單擊右鍵進(jìn)行檢查然后刷新界面:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_爬蟲(chóng)_04

在解析的網(wǎng)絡(luò)模塊數(shù)據(jù)中,我們看到了menu這個(gè)東西,我深深地被她吸引了,所以說(shuō)我打算試一試,看看到底是啥吸引了我!

在她的預(yù)覽中心,我們可以看到,有很多不同種類(lèi)的咖啡:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)挖掘_05

然后在標(biāo)頭中找到我們需要的接口,來(lái)對(duì)她進(jìn)行更深一步的了解:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)挖掘_06

3.更加深入的了解她的內(nèi)心

1.嘗試直接進(jìn)入,看看她是否對(duì)我有防備

通過(guò)給定的接口直接進(jìn)入:

import urllib.request
url = 'https://www.starbucks.com.cn/menu/'

response = urllib.request.urlopen(url)
content = response.read().decode('utf-8')
print(content)

得到我們的數(shù)據(jù):

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_python_07

點(diǎn)擊??ctrl+F??搜索一下之前頁(yè)面上的第一杯奶茶:??阿馥奇朵??看看有沒(méi)有:

我們可以看到找到了!

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_python_08

2.更加一步解析她的內(nèi)心

對(duì)她大概有了一個(gè)了解之后,我們要深入到她的各個(gè)品性中去,我們她的每一個(gè)品性進(jìn)行深入了解!

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)_09

進(jìn)一步分析,我們可以獲取各類(lèi)咖啡的不同解析位置:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_原力計(jì)劃_10

這些標(biāo)簽里面的的小標(biāo)簽分別代表不同類(lèi)型咖啡里面的不同名稱(chēng)。

進(jìn)一步使用我的Xpath獲取數(shù)據(jù)具體內(nèi)容:

xpath不懂的同學(xué)自覺(jué)看:??1024不孤單!??Xpath爬蟲(chóng)——你最忠實(shí)的伴侶:老規(guī)矩給我一分鐘,萬(wàn)字教你入手Xpath!?

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)挖掘_11

獲取具體內(nèi)容:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)_12

4.初步打開(kāi)心扉

按照我們剛才的步驟,使用bs4整理一下我們的思路代碼:

import urllib.request
url = 'https://www.starbucks.com.cn/menu/'

response = urllib.request.urlopen(url)
content = response.read().decode('utf-8')
# print(content)
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
# //ul[@class="grid padded-3 product"]//strong/text()
name_list = soup.select('ul[class="grid padded-3 product"] strong')
print(name_list)

得到:

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_原力計(jì)劃_13

5.分析完畢,直接拿下?。?!

import urllib.request
url = 'https://www.starbucks.com.cn/menu/'

response = urllib.request.urlopen(url)
content = response.read().decode('utf-8')
# print(content)
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
# //ul[@class="grid padded-3 product"]//strong/text()
name_list = soup.select('ul[class="grid padded-3 product"] strong')
# print(name_list)
for name in name_list:
print(name.string)

獲取其中的字符串:

for name in name_list:
print(name.string)
# 或者
print(name.get_text())

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_原力計(jì)劃_14

??????如果你喜歡的話,就不要吝惜你的一鍵三連了~

爬蟲(chóng)中的戀愛(ài)學(xué)心理你get了嗎?一杯星巴克溫暖你的整個(gè)冬天——爬蟲(chóng)bs4解析從入門(mén)到入坑_數(shù)據(jù)挖掘_15



本文摘自 :https://blog.51cto.com/u

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >