目標網站:https://www.quanjing.com/category/1286521/2.html
爬取搜索出來的所有“中東人”的圖片:
先看一下源代碼,找到存放圖片鏈接的地方,在源代碼最下面的部分:

先說一下思路:
構造url列表=》依次爬取每個頁面=》先在網頁源代碼中找到存放圖片鏈接的地方=》獲取到這一地方的文本=》正則匹配出每個頁面中每張圖片的鏈接=》存儲每張圖片
來看爬取的代碼:
import requests
import re
from bs4 import BeautifulSoup
address = "https://www.quanjing.com/category/1286521/"
url_list = [] #用於存儲,每個頁面的url列表
pipei = re.compile('<img.*?lowsrc="(.*?)"') #構造正則表達式,用於下面匹配出每張圖片的鏈接
# 構造url
def get_url_list():
for i in range(1, 3): #規定爬取到的頁數,這里爬取到第二頁
url = address + str(i) + '.html'
url_list.append(url)
return url_list
def run():
y = 1
i = 0
for url in get_url_list(): #這個循環用於依次爬取頁面
html = requests.get(url=url).text #請求頁面
soup = BeautifulSoup(html, 'lxml')
divs = str(soup.find_all(attrs={"class": "list"})) #獲取存放鏈接的那一部分文本,並轉換為字符串,正則必須是字符串類型要不不能進行匹配
lianjies = re.findall(pipei, divs) #匹配到一個頁面中每一張圖片的鏈接,以列表的形式返回
for lianjie in lianjies: #這個循環用於存儲頁面中的每一張圖片
result = requests.get(url=lianjie).content
with open('E:\py project\quanjingwang\image\{}.jpg'.format(i), 'wb') as f:
f.write(result)
i += 1
print("第{0}張存儲完成".format(i))
print("第{0}頁爬取完成".format({y}))
y += 1
if __name__ == '__main__':
run()
代碼不難,但爬取速度有點慢,后面試着改成多線程。。。(ps:太菜了,若文章有錯誤,歡迎大佬隨時指正。。)
