前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫,WP站图片PY多线程下载爬虫

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

作者头像
二爷
发布2021-12-02 12:14:34
4860
发布2021-12-02 12:14:34
举报
文章被收录于专栏:二爷记二爷记

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

爬取思路

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

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

爬取过程

  1. 搜索列表页获取

关于搜索列表页获取,需要注意观察网址的变化情况,尤其以列表首页以及第二页的变动为主,也就是总结网址链接变动规律,通过观察测试获得的规律,通过Python来模拟组合实现一致的url网址链接!

构造搜索列表页源码参考:

代码语言:javascript
复制
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获取参考:

代码语言:javascript
复制
hrefs=tree.xpath('//div[@class="article"]/h2/a/@href')
  1. 详情页数据解析

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

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

代码语言:javascript
复制
imgs=tree.xpath('//div[@class="context"]//img/@src')

标题xpath获取参考:

代码语言:javascript
复制
h1=tree.xpath('//h1/text()')[0]

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

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

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

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

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

图片文件名处理参考:

代码语言:javascript
复制
imgurl = img
if "?" in img:
    imgn = img.split('?')[0]
    imgname = imgn.split('/')[-1]
else:
    imgname=img.split('/')[-1]

图片下载处理参考:

代码语言:javascript
复制
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} 完成!")

多线程下载图片处理参考:

代码语言:javascript
复制
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(">> 多线程下载图片完成!")

运行效果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与SEO学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取思路
  • 爬取过程
  • 运行效果
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档