目标网站: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:太菜了,若文章有错误,欢迎大佬随时指正。。)
原文:https://www.cnblogs.com/liangxiyang/p/11045045.html