自制翻页型爬虫(思路适用很多网站)

本文介绍了一种从wear.tw网站批量下载图片的方法,通过分析网页翻页规律和源代码,提取图片链接并进行批量下载。适用于对图片数据有需求的数据分析师。


BULLSHIT

非“数据科学家”(挺烦别人自称数据科学家的,分析师就分析师,哪来这么多科学家)的我,还得负责数据这块,好辛苦。?

对我来说爬虫是玄学,写起来坎坎坷坷,于是自己想笨办法下载图片数据。

目标网站:wear.tw(很多人分享自己的穿衣)

讲一下思路。


翻页

首先切换到MEN分类下面的能够翻页的页面:
在这里插入图片描述
see?最下面有翻页按钮。
翻页试试,盯住浏览器的地址栏,发现页面地址变化规律:

https://wear.tw/men-coordinate/?pageno=1
https://wear.tw/men-coordinate/?pageno=2
https://wear.tw/men-coordinate/?pageno=3
······

ez to find out the law ?
这个规律可以帮助我们在批量获取网页内容的时候做循环


网页源代码

停留在想要爬取的页面,鼠标右键查看网页源代码,u’ll see things like:
在这里插入图片描述
然后我找啊找,心中默念xxxxx.jpg,于是找到了好多嘿嘿:

<p class="img"><img src="/common/img/blank.gif" data-original="//cdn.wimg.jp/coordinate/e4rj3i/20190421084936004/20190421084936004_276.jpg" data-originalRetina="//cdn.wimg.jp/coordinate/e4rj3i/20190421084936004/20190421084936004_500.jpg" alt="Suzu&#20351;&#29992;&#12300;INTER FACTORY&#65288;WEARISTA KEI &#215; INTER FACTORY&#12288;&#12525;&#12531;&#12464;&#12473;&#12522;&#12540;&#12502;&#12467;&#12540;&#12481;&#12472;&#12515;&#12465;&#12483;&#12488;&#65289;&#12301;&#30340;&#26178;&#23578;&#31359;&#25645;" width="232" height="310"></p>

看到中间的data-originalRetina关键字没?它的值cdn.wimg.jp/coordinate/e4rj3i/20190421084936004/20190421084936004_500.jpg就是我们需要的图片链接。打开链接会出现一张对应的照片:
在这里插入图片描述
这样的链接在一个页面里面一共有45个,也就是说每张页面包含45张我们需要的图片。


思路

有了这些信息,获取图片就很简单鸟:

  • 做一个网页翻页的循环
  • 对每一个页面获取网页源代码,保存所有的网页源代码到一个txt文件
  • 对txt文件做特定字符提取,也就是提取我们需要的图片链接
  • 批量对所有链接的图片进行下载

代码示例

根据以上思路,我们可以down下很多网站的图片,比如有货

#encoding=utf-8
import re
import os
import urllib.request
import urllib
from urllib.request import urlretrieve
import sys
import requests
from bs4 import BeautifulSoup

def read_pageHtml(url):# 获取网页源代码
    htmlr=requests.get(url)
    bsObjHtml=BeautifulSoup(htmlr.text, features="lxml")
    return bsObjHtml

imglist = []
c=1
for a in range(1, 336):# 设置网页循环
    url = 'https://www.yohobuy.com/list/ci78.html?page='+str(a)# 网址规律
    data = read_pageHtml(url).__str__()
    rule = r'data-src="(.*?)?image'# 图片链接的提取规则
    imglist = re.findall(rule, data)# 查找所有图片链接

    for each in imglist:# 对每个图片链接进行下载
        try:
            urlretrieve('https:'+each, './yh/dp/dp'+str(c)+'.jpg')
            c=c+1
        except:
            pass

hope it helps ?

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值