python爬虫之正则表达式搜索实战练练手

这次用正则表达式练练手,正则表达式网上有很多在线测试的工具,倒是xpath很少基本没有真正的在线测试。上期做过xpath解析,这次用正则表达式来搜索。中途不懂就查正则表达式的例子看。这次爬的是彼岸图网的4k动漫壁纸,原理也很简单,毕竟是静态网页来的,html中就有想要的图片链接。就是要点进每个图片中才有大图的链接,否则是类似缩略图是小的。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import re
import os


def getHTMLText(url, num):
    text = []
    r = requests.get('http://pic.netbian.com/4kdongman/index.html', timeout=30)
    r.raise_for_status()
    text.append(r.text)
    for i in range(2, num):
        u = url + str(i) + '.html'
        text.append(getHTML(u))
    return text


# 返回htmlText的接口
def getHTML(url):
    r = requests.get(url, timeout=30)
    r.raise_for_status()
    return r.text


# 第一层解析 : tupian/8888.html
def parseHTML(text):
    tupian = []
    for t in text:
        try:
            ids = re.findall(r'/tupian/[\d]*.html', t)
            tupian.append(ids)
        except:
            continue
    return tupian


# 第二层解析
def parseHTML2(url2, tupian):
    imgList = []
    for i in tupian:
        for j in i:
            u = url2 + j
            text = getHTML(u)
            try:
                img = re.findall(r'id="img"><img src="/uploads/allimg/.*?.jpg', text)[0].split("allimg")[-1]
                imgList.append(img)
            except:
                continue
    return imgList


def downloadImg(imgList):
    if not os.path.exists('彼岸图网4k动漫壁纸'):
        os.mkdir('彼岸图网4k动漫壁纸')
    else:
        pass
    os.chdir('彼岸图网4k动漫壁纸')
    num = 1
    for img in imgList:
        resub = re.sub('/', '_', img)
        if os.path.exists(resub):
            print('已存在壁纸 {}'.format(resub))
        else:
            content = requests.get('http://pic.netbian.com/uploads/allimg' + img).content
            with open(resub, 'wb') as f:
                print('正在下载第{}张: {}'.format(num, img))
                f.write(content)
            num += 1
    print(num - 1, '张图片下载成功!')


def main():
    num = 1
    url = 'http://pic.netbian.com/4kdongman/index_'
    url2 = 'http://pic.netbian.com'
    text = getHTMLText(url, num)
    tupian = parseHTML(text)
    imgList = parseHTML2(url2, tupian)
    downloadImg(imgList)
    # print(imgList)


main()

这次的代码是早弄好的,没有像上期的xpath解析那样认真检查,毕竟上期可是福利来的哈哈?。

利用正则表达式re的findall方法,怕表达式写错提取不出想要的可以到在线测试工具测试,这次依然要注意文件夹名称不能有非法字符,可以用正则表达式的sub函数来替换字符。

不懂可问,不好可点。

虽然是很小白的代码,为了丰富csdn小的也写进去吧,或者csdn就放这些小程序好啦。

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值