糗事百科图片爬取
import requests
import re
import os
url = 'https://www.qiushibaike.com/imgrank/page/%d/' # 用python的%d代表数字 又忘记加/左斜杠
for pageNum in range(1,11): # 大的for循环,遍历到最后页面执行退出,之后的语句都在这个循环下
new_url = format(url % pageNum) # 可以这样格式化字符串啊
# print(new_url)
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
page_text = requests.get(url=new_url,headers=headers).text
ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>'
img_list = re.findall(ex, page_text, re.S) # re.S可处理匹配到换行的字符串
if not os.path.exists('./qiushi'):
os.mkdir('./qiushi')
for img in img_list:
img_url = 'https:' + img
print(img_url)
img_name = img.split('/')[-1]
img_data = requests.get(url=img_url,headers=headers).content
img_path = './qiushi/' + img_name # +号就可以变成这种形式:./qiushi/img_name 可以自己加个/ 我傻了 没加/导致无法写入图片
with open(img_path,'ab+') as f: # 这里为啥写不进去文件啊 img_path = './qiushi' + img_name 我这里少加了个/
f.write(img_data)
print(img_name,'下载成功')
感想
整个爬取正则表达式唯一的精髓就在于该正则表达式
ex = '<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>'
该正则匹配后的列表形式['',]
这个正则我没懂他是如何提取到该页面的url的
ex = '<div class="thumb">.*?<img src="(.*?)" alt=(.*?)</div>'
加上了括号就变成了元组在列表中的类型了,[(),]
努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。