Python第一次爬虫三部曲 wallhaven壁纸网站(requests库,re正则库)一看就会

工具

  工具 pycharm,python版本3.7.0,网站:wallhaven壁纸,这个网站是国外的,可能打开会慢一点。

爬取首页壁纸(第一部)

首页壁纸预览
  先把源代码爬下来分析,需导入requests第三方库。用pip下载或者pycharm帮助下载,先保证pycharm用的python和cmd下python是同一个

import requests
import re

url='https://wallhaven.cc/'
respone=requests.get(url)
print(respone.text)

  爬下来后,我习惯去用谷歌浏览器的审查元素去看网页源代码。
第一个图片代码:在这里插入图片描述
对链接分析,要获得img src 后面的内容正则这样写:

<a href=".*?"><img src="(.*?)" width=".*?" alt="" /></a>

拿到链接后,我点开,发现是小图,很不清楚的那种。效果这样:
https://th.wallhaven.cc/lg/2e/2em38y.jpg他的大图链接需要点进去详细页面获取 是这个https://w.wallhaven.cc/full/2e/wallhaven-2em38y.jpg,他们之间还是有一定的规则的,我观察后发现,其他也有类似的规则,于是用拼接字符串可以获得大图的链接。

import requests
import re

url='https://wallhaven.cc/'
respone=requests.get(url)
pattern=re.compile('<a href=".*?"><img src="(.*?)" width=".*?" alt="" /></a>',re.S)
results=re.findall(pattern,respone.text)
pattern1=re.compile(r'https://th.wallhaven.cc/.*?/(.*?)/(.*)',re.S)
for result in results:
    ss=re.match(pattern1,result)
    print('https://w.wallhaven.cc/full/'+ss.group(1)+"/wallhaven-"+ss.group(2))

这是全部的代码,运行一下看一下效果

D:\Python3.7.0\python.exe "E:/pycharm/Working directory/shubiao/pachong/wallhaven1.py"
https://w.wallhaven.cc/full/2e/wallhaven-2em38y.jpg
https://w.wallhaven.cc/full/dg/wallhaven-dgrgql.jpg
https://w.wallhaven.cc/full/6k/wallhaven-6k8kkx.jpg
https://w.wallhaven.cc/full/39/wallhaven-3911w9.jpg
https://w.wallhaven.cc/full/dg/wallhaven-dg7y23.jpg
https://w.wallhaven.cc/full/zm/wallhaven-zmm7mw.jpg
https://w.wallhaven.cc/full/md/wallhaven-mdzdok.jpg
https://w.wallhaven.cc/full/x1/wallhaven-x1wroo.jpg
https://w.wallhaven.cc/full/ey/wallhaven-eymzjk.jpg
https://w.wallhaven.cc/full/13/wallhaven-13vym3.jpg
https://w.wallhaven.cc/full/g8/wallhaven-g866qq.jpg
https://w.wallhaven.cc/full/md/wallhaven-md5z28.jpg
https://w.wallhaven.cc/full/6k/wallhaven-6k3oox.jpg
https://w.wallhaven.cc/full/lm/wallhaven-lmxmxy.jpg
https://w.wallhaven.cc/full/2e/wallhaven-2evglg.jpg
https://w.wallhaven.cc/full/ym/wallhaven-ymoo2x.jpg
https://w.wallhaven.cc/full/ym/wallhaven-ymojgd.jpg
https://w.wallhaven.cc/full/ox/wallhaven-ox83gp.jpg
https://w.wallhaven.cc/full/ym/wallhaven-ymo837.jpg
https://w.wallhaven.cc/full/dg/wallhaven-dgzj9o.jpg
https://w.wallhaven.cc/full/ox/wallhaven-oxv6gl.jpg
https://w.wallhaven.cc/full/96/wallhaven-96w8e8.jpg
https://w.wallhaven.cc/full/5w/wallhaven-5w82r1.jpg
https://w.wallhaven.cc/full/xl/wallhaven-xl2qgo.jpg
https://w.wallhaven.cc/full/zm/wallhaven-zmr6qv.jpg
https://w.wallhaven.cc/full/r2/wallhaven-r2ze21.jpg
https://w.wallhaven.cc/full/96/wallhaven-96yzg8.jpg
https://w.wallhaven.cc/full/13/wallhaven-13mk9v.jpg

Process finished with exit code 0

这是初步获取到的wallhaven首页图片的代码效果,大部分都是正确的,有的点不进去,因为小图是jpg格式,但是大图可能是png格式的,这时候,我们就无法正确获取图片了。

按页码爬取网站top图片(第二部)

  网站:https://wallhaven.cc/toplist,这是壁纸排行榜的网页,在滑动滚轮的时候,他可以一直加载,后来发现网址会不断变化,类似这种https://wallhaven.cc/toplist?page=2,那好了,有思路了,根据不同的链接爬取该链接下全部图片a链接,就是图片的详细链接,在分析详细链接,获取图片的链接,避免了一部曲中部分图片爬错的情况。

获取页面的全部图片详细链接(a链接)

这里,写了一个方法获取

def readUrlOne(url):
    pattern = re.compile(r'<a class="preview" href="(.*?)"  target="_blank"  ></a>', re.S)
    results = re.findall(pattern, requests.get(url).text)
    return results

爬取到全部图片的href链接。

根据爬取到的href网页,获取图片地址
def readUrlTwo(url):
    pattern = re.compile(r'<img id="wallpaper" src="(.*?)"', re.S)
    response = requests.get(url);
    results = re.search(pattern, response.text)
    return results.group(1)
获取某页下的全部图片地址

调用前面的两个方法。

def geturl1(n):
    url='https://wallhaven.cc/toplist?page='+str(n)
    results=readUrlOne(url)
    for result in results:
        print(readUrlTwo(result))

能够输出n页的全部图片地址。

代码不细讲了,参考正则和requests库的教程
geturl1(3)

看一下代码效果:

D:\Python3.7.0\python.exe "E:/pycharm/Working directory/shubiao/pachong/wallhaven2.py"
https://w.wallhaven.cc/full/6k/wallhaven-6krzkw.png
https://w.wallhaven.cc/full/ym/wallhaven-ymprz7.jpg
https://w.wallhaven.cc/full/73/wallhaven-7357lo.jpg
https://w.wallhaven.cc/full/kw/wallhaven-kwqyvm.jpg
https://w.wallhaven.cc/full/q6/wallhaven-q6yvdq.jpg
https://w.wallhaven.cc/full/13/wallhaven-13zm9g.png
https://w.wallhaven.cc/full/2e/wallhaven-2eqpzm.png
https://w.wallhaven.cc/full/ox/wallhaven-oxrep9.jpg
https://w.wallhaven.cc/full/ey/wallhaven-eymqxr.png
https://w.wallhaven.cc/full/73/wallhaven-735kje.png
https://w.wallhaven.cc/full/73/wallhaven-735qz3.jpg
https://w.wallhaven.cc/full/md/wallhaven-mdkm79.jpg
https://w.wallhaven.cc/full/5w/wallhaven-5w9qe9.jpg
https://w.wallhaven.cc/full/ym/wallhaven-ympdwg.png
https://w.wallhaven.cc/full/73/wallhaven-735kwo.jpg
https://w.wallhaven.cc/full/96/wallhaven-96l7lk.png
https://w.wallhaven.cc/full/96/wallhaven-96l761.jpg
https://w.wallhaven.cc/full/ey/wallhaven-eymk6r.jpg
https://w.wallhaven.cc/full/83/wallhaven-83y6qk.jpg
https://w.wallhaven.cc/full/73/wallhaven-735vg3.jpg
https://w.wallhaven.cc/full/r2/wallhaven-r2l55j.jpg
https://w.wallhaven.cc/full/zm/wallhaven-zmeeoj.jpg
https://w.wallhaven.cc/full/j5/wallhaven-j5g3pw.jpg
https://w.wallhaven.cc/full/ey/wallhaven-eymgrk.jpg

Process finished with exit code 0

这次算是比较完整的爬虫了,只不过最近wifi没修好,用的热点,就还没写下载的代码。爬取到的链接都是正常的图片地址,根据这些集合python下载文件库,就可以把图片爬取到本地了。只不过爬取过程中感觉不是特别快。可能跟这个外网有关。三部曲若爬取多页图片并下载,建议使用多线程。

后期改动:链接

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值