Python爬虫入门-正则匹配图片资源

闲来无事看了半天Python语法,写了一个图片抓取脚本,功能也比较单一,目前已实现功能:

1.获取首页所有包含图片的网页地址。
2.一一将首页获取的地址打开,获取单页下面的所有图片地址。
3.下载单页包含的所有图片到img目录下。
4.查找翻页参数,如果有下一页,页码+1后递归下载每页图片。

注:请勿频繁抓取数据,对服务器压力较大,请大家都做有素质的网民。数据来源于网络,侵权请告知。

运行示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkKe552n-1583931038668)(https://user-gold-cdn.xitu.io/2020/3/3/170a0b39b18e472c?w=2798&h=1832&f=png&s=1517019)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g7ToUa0b-1583931038669)(https://user-gold-cdn.xitu.io/2020/3/3/170a0b404251564d?w=2798&h=1832&f=png&s=1186006)]

源代码:

import os
import time
import urllib

import requests
import re

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}


# 单页数据遍历
def getImages(img_url, page):
    page_url = img_url
    # 如果页码大于0,说明需要翻页,拼装页码
    if page > 1:
        page_url = img_url + '/' + str(page)
        print(f'加载翻页数据:{page_url}')
    response = requests.get(page_url, headers=headers)
    html = response.text
    # urls = re.findall('<img alt=".*?" class="alignnone size-full" data-src=".*?"', html)

    try:
        # 判断是否有下一页
        next_page = '<i class="iconfont icon-arrowright"></i>'
        # 如果有下一页,页码+1
        if re.search(next_page, html).group():
            page = page + 1
        else:
            page = 1
    except AttributeError:
        page = 1

    urls = re.findall('<a href=".*?" alt=".*?" title=".*?">', html)

    print(f'页面全部A标签:{urls}')

    for url in urls:
        item_content = re.search('<a href="(.*)" alt.*?title="(.*)"', url)
        name = item_content.group(1)[:]
        title = item_content.group(2)[:]
        name = name.split('&')[0]
        name = urllib.parse.unquote(name)
        print(f'处理后的名称:{name}')
        time.sleep(5)

        file_name = name.split('/')[-1]
        print(f'开始下载图片:{file_name}')
        path = './imgs/' + title
        img_path = path + '/' + file_name

        # 存在相同图片,跳过此次下载
        if os.path.exists(img_path):
            print(f'重复图片,跳过下载:{file_name}')
            continue

        isExists = os.path.exists(path)
        # 创建目录
        if not isExists:
            os.makedirs(path)
        # 下载图片
        response = requests.get(name, headers=headers)
        with open(img_path, 'wb') as f:
            f.write(response.content)
            f.close()

    if page > 1:
        getImages(img_url, page)


response = requests.get('https://www.vmgirls.com', headers=headers)
print(response.request.headers)
html = response.text
print(response.text)

main_urls = re.findall('https://www.vmgirls.com/(\d.*).html', html)
main_urls = {}.fromkeys(main_urls).keys()
print('获取到资源页面:', main_urls)

# 取单页数据进行抓取
for url in main_urls:
    full_url = 'https://www.vmgirls.com/' + url + '.html'
    print(f'开始爬取:{full_url} 数据。')
    getImages(full_url, 1)

发布了122 篇原创文章 · 获赞 238 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/c__chao/article/details/104805310
今日推荐