一个简单的Python爬虫,适合学习参考练手使用,由于详情页图片较多,故简单的应用了多线程下载图片,目标站点为WordPress程序,按照流程获取都能成功!
搜索入口-列表页链接-详情页-获取图片
以关键词搜索获取搜索结果列表页,从列表页获取到所有的详情页链接,通过遍历详情页,获取到详情页上的所有图片,进行下载保存!
关于搜索列表页获取,需要注意观察网址的变化情况,尤其以列表首页以及第二页的变动为主,也就是总结网址链接变动规律,通过观察测试获得的规律,通过Python来模拟组合实现一致的url网址链接!
构造搜索列表页源码参考:
for page in range(1,37):
if page==1:
url="http://www.shejijingsai.com/?s=%E6%AF%95%E4%B8%9A%E5%B1%95"
else:
url=f'http://www.shejijingsai.com/page/{page}?s=%E6%AF%95%E4%B8%9A%E5%B1%95'
关于列表页上的链接获取,直接用xpath获取即可,需要注意的是,获取到的网址链接是否为完整链接,如是否却是了主域名,或者确实了https等,如果有缺失,补上即可!
列表页链接xpath获取参考:
hrefs=tree.xpath('//div[@class="article"]/h2/a/@href')
详情页数据获取,这是关键,这里我们需要拿到的是所有图片的链接地址,当然考虑到存储,这里本渣渣连标题一起获取到,方便存储和分类图片数据!
详情页图片链接xpath获取参考:
imgs=tree.xpath('//div[@class="context"]//img/@src')
标题xpath获取参考:
h1=tree.xpath('//h1/text()')[0]
注意,由于需要将标题作为存储文件夹名,需要对特殊字符进行过滤或者处理!
存储文件夹标题字符处理参考:
pattern = r"[\/\\\:\*\?\"\<\>\|]"
h1 = re.sub(pattern, "_", h1) # 替换为下划线
关于图片的下载保存,需要获取或者说准备基本的三个参数,图片文件的真实链接,图片文件名,图片存储路径,而往往图片文件名大部分都是可以通过图片文件链接后缀,也就是文件名后缀来拼接存储保存!
当然某些时候,你还需要考虑到某些特殊图片链接,这些都是需要针对实际来进行匹配和处理的!
图片文件名处理参考:
imgurl = img
if "?" in img:
imgn = img.split('?')[0]
imgname = imgn.split('/')[-1]
else:
imgname=img.split('/')[-1]
图片下载处理参考:
print(f">> 正在下载图片:{imgname} ..")
headers={
"User-Agent":UserAgent().random
}
r=requests.get(imgurl,headers=headers,timeout=10)
time.sleep(1)
print(r.status_code)
with open(f'{path}{imgname}','wb') as f:
f.write(r.content)
print(f">> 下载图片:{imgname} 完成!")
多线程下载图片处理参考:
threadings=[]
for img in imgs:
t=threading.Thread(target=self.get_img,args=(img,path))
threadings.append(t)
t.start()
for x in threadings:
x.join()
print(">> 多线程下载图片完成!")
本文分享自 Python与SEO学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!