最近在自学python的爬虫方法,总结了一些笔记在此分享。
先以搜索词“哆啦A梦”为例:
可能使用到的头文件有:
import re
import os
import requests
使用requests模块的get()方法可以获得一个网址的源码
url = '''https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=哆啦A梦
&pn=20&gsm=3c&ct=&ic=0&lm=-1&width=0&height=0'''
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
result = requests.get(url, headers=header).content.decode()
print(result)
进入此网址,按F12浏览网页源代码可以发现,每张图片对应地址有如下格式:
使用re模块中的findall()方法匹配所有此格式的字符串:
url_list = re.findall(r'"thumbURL":"(.*?.jpg)"',result,re.S)
url_list为一个有60个元素的列表,每个元素对应一张图片的链接。
最后一步,遍历url_list中的所有元素,逐个下载保存即可。
idx=1
for url in url_list:
img=requests.get(url,headers=header)
file=open('image/'+str(idx)+'.jpg','wb')
file.write(img.content)
file.close()
idx+=1效果图
最后完善一下交互操作即可实现自动爬取百度图片。
import re
import os
import requests
import tqdm
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
def getImg(url,idx,path):
img=requests.get(url,headers=header)
file=open(path+str(idx)+'.jpg','wb')
file.write(img.content)
file.close()
search=input("请输入搜索内容:")
number=int(input("请输入需求数量:"))
idx=0
path='image/'+search+'/'
if not os.path.exists(path):
os.makedirs(path)
bar=tqdm.tqdm(total=number)
for i in range(number//60+1):
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+search+'&pn=%d&gsm=3c&ct=&ic=0&lm=-1&width=0&height=0'%(i*60)
result = requests.get(url, headers=header).content.decode()
url_list = re.findall(r'"thumbURL":"(.*?.jpg)"',result,re.S)
for url in url_list:
idx+=1
getImg(url,idx,path)
bar.update(1)
if idx>=number:
break
print("finish!")效果图