作者:Irain
QQ:2573396010
微信:18802080892
GitHub項目連結:https://github.com/Irain-LUO/Scrapy_Study.
視訊資源連結:https://www.bilibili.com/video/BV1P4411f7rP?p=28
爬取目标網頁連結:微軟版本的國内谷歌
目錄
-
-
- 1 BeautifulSoup4庫内容
-
- 1.1BeautifulSoup4解析成樹狀圖
- 1.2 解析工具比較
- 2 BeautifulSoup4筆記
- 3 BeautifulSoup4示例:通路網頁https://cn.bing.com/
-
- 3.1 擷取所有div标簽
- 3.2 擷取第2個div标簽
- 3.3 擷取所有class等于oml_img的div标簽
-
- 3.3.1 擷取所有class等于oml_img的div标簽方法一
- 3.3.2 擷取所有class等于oml_img的div标簽方法二
- 3.4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
-
- 3.4.1 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一
- 3.4.2 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二
- 3.5 獲得所有a标簽的href屬性
-
- 3.5.1 獲得所有a标簽的href屬性方法一
- 3.5.2 獲得所有a标簽的href屬性方法二
- 3.6 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串
-
- 3.6.1 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法一
- 3.6.2 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法二
- 3.7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串
-
1 BeautifulSoup4庫内容
1.1BeautifulSoup4解析成樹狀圖
1.2 解析工具比較
2 BeautifulSoup4筆記
3 BeautifulSoup4示例:通路網頁https://cn.bing.com/
import requests
from bs4 import BeautifulSoup
headers = {
'Usr-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'cookie':'__guid=240418321.2698196731532421000.1585372730409.6943; sid=654461e8-539a-4ec3-a2c6-a2ecd5adab8d; Hm_lvt_2c8ad67df9e787ad29dbd54ee608f5d2=1585372731; monitor_count=4; Hm_lpvt_2c8ad67df9e787ad29dbd54ee608f5d2=1585372875', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'max-age=0',
'Connection':'keep-alive'
}
url = "https://cn.bing.com/" # 微軟版的國内谷歌
response = requests.get(url=url, headers=headers) # 通路網址
html = response.text
soup = BeautifulSoup(html, 'lxml') #BeautifulSoup4解析網頁
3.1 擷取所有div标簽
# 1 擷取所有div标簽
print('='*30, "1 擷取所有div标簽", '='*30)
divs = soup.find_all('div')
i = 1
for div in divs:
print("第{}個div标簽:".format(i),div)
print('='*88)
i += 1
3.2 擷取第2個div标簽
# 2 擷取第2個div标簽
print('='*30, "2 擷取第2個div标簽", '='*30)
div = soup.find_all('div', limit=2)[1] # limit=2:隻獲得兩個div标簽
print("擷取第2個div标簽:",div)
print('='*88)
3.3 擷取所有class等于oml_img的div标簽
3.3.1 擷取所有class等于oml_img的div标簽方法一
# 3 擷取所有class等于oml_img的div标簽
print('='*30, "3 擷取所有class等于oml_img的div标簽方法一", '='*30)
divs = soup.find_all('div', class_='oml_img')
i = 1
for div in divs:
print("第{}個div标簽:".format(i),div)
print('='*88)
i += 1
3.3.2 擷取所有class等于oml_img的div标簽方法二
# 3 擷取所有class等于oml_img的div标簽
print('='*30, "3 擷取所有class等于oml_img的div标簽方法二", '='*30)
divs = soup.find_all('div', attrs={'class':'oml_img'})
i = 1
for div in divs:
print("第{}個div标簽:".format(i),div)
print('='*88)
i += 1
3.4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
3.4.1 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一
# 4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
print('='*30, "4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一", '='*30)
divs = soup.find_all('div', attrs={'class':'oml_img', 'id':'officemenu_people_img'})
i = 1
for div in divs:
print("第{}個div标簽:".format(i),div)
print('='*88)
i += 1
3.4.2 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二
# 4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
print('='*30, "4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二", '='*30)
divs = soup.find_all('div', class_='oml_img', id='officemenu_people_img')
i = 0
for div in divs:
print("第{}個div标簽:".format(i),div)
print('='*88)
i += 1
3.5 獲得所有a标簽的href屬性
3.5.1 獲得所有a标簽的href屬性方法一
# 5 獲得所有a标簽的href屬性
print('='*30, "5 獲得所有a标簽的href屬性方法一", '='*30)
aLists = soup.find_all('a')
for a in aLists:
href = a['href']
print(href)
3.5.2 獲得所有a标簽的href屬性方法二
# 5 獲得所有a标簽的href屬性
print('='*30, "5 獲得所有a标簽的href屬性方法二", '='*30)
aLists = soup.find_all('a')
for a in aLists:
href = a.attrs['href']
print(href)
3.6 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串
3.6.1 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法一
# 6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽中的a标簽的字元串
print('='*30, "6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽的a标簽的字元串方法一", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
for li in lis:
try: # 存在一個li标簽中沒有a标簽
a = li.find_all('a') # 擷取a标簽
str = a[0].string # 擷取a标簽的字元
print(str)
except:
str = li.string # 擷取li标簽的字元
print(str)
3.6.2 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法二
# 6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽中的a标簽的字元串
print('='*30, "6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽的a标簽的字元串方法二", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
print(lis.strings)
for li in lis:
# 在這裡:li.strings與li.stripped_strings效果一樣。bing.com網頁暫無發現合适元素作為示例。
str = list(li.stripped_strings)[0] # stripped_strings:去除空字元(隻有換行符'\n',也算是空字元)
print(str)
3.7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串
# 7 獲得class=sc_hl1 hp_head_nav的ul标簽中所有的字元串
print('='*30, "7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
str = lis.get_text()
print(type(str))
print(str)
釋出:2020年5月13日