python爬虫爬取网页图片,并下载保存到本地(需要翻页的网页)

1、需要找到网页翻页后网址变化的规律, 比如我爬取的网页的变化是

首页:http://xxxxxxxxxxxxxxx

第二页:  http://xxxxxxxxxxxxxxx&page=2

第三页:  http://xxxxxxxxxxxxxxx&page=3

.......以此类推

所以在代码中:

baseUrl = http://xxxxxxxxxxxxxxx

后面只需要用for循环改变page的数值就可以了,这样就可以获取所需的页数。

2、需要找到网页html中图片的地址的规律,然后利用正则获取出图片的地址:

我爬取的网页的规律是 图片地址在src 和onerror之间,所以我的正则表达式为:

pic_url = re.findall('src="(.*?)" onerror', result)

 根据自己爬的网站修改以上两处应该就可以下载了!

# -*- coding: utf-8 -*-
import re
import requests
# from urllib import error
# from bs4 import BeautifulSoup
import os

List = []  # 存放图片链接的列表

# 爬取图片链接
def Find(url, A):
    global List
    print('正在检测图片总数,请稍等.....')
    global s
    s = 0
    try:
        Result = A.get(url, timeout=7, allow_redirects=False)
    except BaseException:
        print("error")
    else:
        result = Result.text
         # 先利用正则表达式找到图片url
        pic_url = re.findall('', result)  
        s += len(pic_url)
        print("第{}页 共{}张照片".format(lst.index(url2) + startpage, s))
        if len(pic_url) == 0:
            print("没读到")
        else:
            List.append(pic_url)
    return s

# 下载图片
def dowmloadPicture():
    num = 1
    for each in List[-1]:
        print('正在下载第' + str(num) + '张图片,图片地址:' + str(each))
        try:
            if each is not None:
                pic = requests.get(each, timeout=7)
            else:
                continue
        except BaseException:
            print('错误,当前图片无法下载')
            continue
        else:
            if len(pic.content) < 2000:
                continue
            # 照片命名: 页码 - 第几张 (命名不能重复,否则在同一文件夹下载后会跳过)
            # 可根据自己的需要进行命名
            string = "Yishu-" + str(startpage + lst.index(url2)) + "-" + str(num) + '.jpg'
            fp = open(string, 'wb')
            fp.write(pic.content)
            fp.close()
            num += 1

baseUrl = 'xxxxxxxxxx'  #此处填写网址
lst = []
#  开始页
# 终止页
startpage = 1
stopPage = 2
for i in range(startpage, stopPage):
    if i == 1:
        url1 = baseUrl
    else:
        url1 = 'xxxxxxxxxxpage={}'.format(i)
    lst.append(url1)   # 把所有需要输出的页数的网址弄成一个列表,方便后续对每一个列表(即每一页)进行遍历

if __name__ == '__main__':
        for url2 in lst:
            url = url2
            # print(url)   #打印出来看下网址有没有改变
            headers = {
                'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
                'Connection': 'keep-alive',
                'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
                'Upgrade-Insecure-Requests': '1'
            }

            A = requests.Session()
            A.headers = headers
            Find(url, A)
            os.chdir("D:\pic")  # 图片保存的路径,可以自己定义,前提是路径存在
            dowmloadPicture()
        print('结束')

你可能感兴趣的:(python,python,爬虫,开发语言)