zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python爬虫,WP站图片PY多线程下载爬虫

2023-03-31 10:31:00 时间

一个简单的Python爬虫,适合学习参考练手使用,由于详情页图片较多,故简单的应用了多线程下载图片,目标站点为WordPress程序,按照流程获取都能成功!

爬取思路

搜索入口-列表页链接-详情页-获取图片

以关键词搜索获取搜索结果列表页,从列表页获取到所有的详情页链接,通过遍历详情页,获取到详情页上的所有图片,进行下载保存!

爬取过程

  1. 搜索列表页获取

关于搜索列表页获取,需要注意观察网址的变化情况,尤其以列表首页以及第二页的变动为主,也就是总结网址链接变动规律,通过观察测试获得的规律,通过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'
  1. 列表页链接获取

关于列表页上的链接获取,直接用xpath获取即可,需要注意的是,获取到的网址链接是否为完整链接,如是否却是了主域名,或者确实了https等,如果有缺失,补上即可!

列表页链接xpath获取参考:

hrefs=tree.xpath('//div[@class="article"]/h2/a/@href')
  1. 详情页数据解析

详情页数据获取,这是关键,这里我们需要拿到的是所有图片的链接地址,当然考虑到存储,这里本渣渣连标题一起获取到,方便存储和分类图片数据!

详情页图片链接xpath获取参考:

imgs=tree.xpath('//div[@class="context"]//img/@src')

标题xpath获取参考:

h1=tree.xpath('//h1/text()')[0]

注意,由于需要将标题作为存储文件夹名,需要对特殊字符进行过滤或者处理!

存储文件夹标题字符处理参考:

pattern = r"[/\:*?"<>|]"
h1 = re.sub(pattern, "_", h1)  # 替换为下划线
  1. 图片下载保存

关于图片的下载保存,需要获取或者说准备基本的三个参数,图片文件的真实链接,图片文件名,图片存储路径,而往往图片文件名大部分都是可以通过图片文件链接后缀,也就是文件名后缀来拼接存储保存!

当然某些时候,你还需要考虑到某些特殊图片链接,这些都是需要针对实际来进行匹配和处理的!

图片文件名处理参考:

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(">> 多线程下载图片完成!")

运行效果