正則解析紅牛分公司
import requests
import re
# 1.朝頁面發送get請求獲取頁面數據
res = requests.get("http://www.redbull.com.cn/about/branch")
# 2.分析數據特征 書寫相應正則
# 2.1.正則解析分公司名稱
title_list = re.findall('<h2>(.*?)</h2>', res.text)
# 2.2.正則解析分公司地址
addr_list = re.findall("<p class='mapIco'>(.*?)</p>", res.text)
# 2.3.正則解析分公司郵編
email_list = re.findall("<p class='mailIco'>(.*?)</p>", res.text)
# 2.4.正則解析分公司電話
phone_list = re.findall("<p class='telIco'>(.*?)</p>", res.text)
res = zip(title_list, addr_list, email_list, phone_list) # 拉鏈方法
print(list(res)) # 將迭代器轉換成普通的列表
爬取糗圖百科圖片數據
import requests
from bs4 import BeautifulSoup
import os
if not os.path.exists(r'糗圖圖片'):
os.mkdir(r'糗圖圖片')
def get_img(url):
# 1.發送get請求獲取頁面數據
res = requests.get(url)
# 2.解析庫bs4
soup = BeautifulSoup(res.text, 'lxml')
# 3.研究標簽特征 獲取圖片鏈接
img_tag_list = soup.find_all(name='img', attrs={'class': 'illustration'})
for img in img_tag_list:
img_src = img.get('src')
full_src = 'https:' + img_src
# 朝圖片完整的地址發送請求保存數據
res1 = requests.get(full_src)
img_name = full_src.rsplit('/')[-1]
file_path = os.path.join(r'糗圖圖片', img_name)
with open(file_path, 'wb') as f:
f.write(res1.content)
print('圖片:%s 保存成功' % img_name)
for i in range(1, 5):
base_url = "https://www.qiushibaike.com/imgrank/page/%s/" % i
get_img(base_url)
爬取優美圖庫高清圖片
import requests
from bs4 import BeautifulSoup
import os
if not os.path.exists(r'優美圖片庫'):
os.mkdir(r'優美圖片庫')
# 1.朝主頁面發送get請求
res = requests.get('https://www.umei.cc/bizhitupian/diannaobizhi/')
'''當使用.text方法之前最好先確認一下頁面數據是否亂碼'''
res.encoding = 'utf-8' # 容易忽略
# 2.獲取二次詳情頁地址鏈接
soup = BeautifulSoup(res.text, 'lxml')
# 由於頁面上有很多列表標簽 我們需要先進行區分 所以先找上一層div標簽
div_tag = soup.find(name='div', attrs={'class': 'TypeList'})
# 先獲取所有的li標簽
li_list = div_tag.find_all(name='li') # ['li>a','li>a',...]
# for循環一個個li標簽 獲取內部a標簽
# 提前定義根目錄地址
base_url = 'https://www.umei.cc'
for li in li_list:
a_tag = li.find(name='a')
a_link = a_tag.get('href')
a_full_link = base_url + a_link
# 朝一個個鏈接地址發送請求
res1 = requests.get(a_full_link)
'''由於我們只需要鏈接 並且發現鏈接沒有字符 全是英文 所以此處不需要考慮'''
soup1 = BeautifulSoup(res1.text, 'lxml')
# 篩選出頁面上的圖片src地址
img_tag = soup1.select('div.ImageBody img') # 列表
for img in img_tag:
src = img.get('src')
# 朝圖片的地址發送請求獲取圖片數據
res2 = requests.get(src)
file_path = os.path.join(r'優美圖片庫', src[-10:])
with open(file_path, 'wb') as f:
f.write(res2.content)
print('圖片:%s 下載成功' % file_path)
爬取梨視頻視頻數據
import requests
from bs4 import BeautifulSoup
# 定義根目錄地址
base_url = 'https://www.pearvideo.com/'
# 1.發送get請求獲取頁面數據
res = requests.get('https://www.pearvideo.com/category_31')
# 2.使用bs4模塊解析
soup = BeautifulSoup(res.text, 'lxml')
# 3.研究視頻詳情鏈接
li_list = soup.select('li.categoryem')
# 4.循環獲取每個li里面的a標簽
for li in li_list:
a_tag = li.find(name='a')
a_href_link = a_tag.get('href') # video_1742158
# second_link = base_url + a_href_link # https://www.pearvideo.com/video_1742158
'''研究發現詳情頁視頻數據並不是直接加載的 也就意味着朝上述地址發送get請求沒有絲毫作用'''
"""
video_1742158
內部動態請求的地址
https://www.pearvideo.com/videoStatus.jsp?contId=1742158&mrd=0.9094028515390931
contId: 1742158
mrd: 0.9094028515390931 0到1之間的隨機小數
動態請求之后返回的核心數據
https://video.pearvideo.com/mp4/adshort/20210920/1632283823415-15771122_adpkg-ad_hd.mp4
真實視頻地址
https://video.pearvideo.com/mp4/adshort/20210920/cont-1742158-15771122_adpkg-ad_hd.mp4
"""
# 通過研究發現詳情頁數據是動態加載的 所以通過network獲取到地址
video_id = a_href_link.split('_')[-1]
headers = {
"Referer": "https://www.pearvideo.com/video_%s" % video_id
}
res1 = requests.get('https://www.pearvideo.com/videoStatus.jsp',
params={'contId': video_id},
headers=headers
)
data_dict = res1.json()
src_url = data_dict['videoInfo']['videos']['srcUrl']
systemTime = data_dict['systemTime']
# https://video.pearvideo.com/mp4/adshort/20210920/1632285084621-15771122_adpkg-ad_hd.mp4
'''如何替換核心數據 通過研究發現systemTime是關鍵'''
real_url = src_url.replace(systemTime, 'cont-%s' % video_id)
防爬措施之防盜鏈
校驗當前請求從何而來 如果是本網站則允許訪問如果是其他網址則拒絕
在請求頭中有一個專門用於記錄從何而來的鍵值對
referer建