1、需要找到网页翻页后网址变化的规律, 比如我爬取的网页的变化是
首页:http://xxxxxxxxxxxxxxx
第二页: http://xxxxxxxxxxxxxxx&page=2
第三页: http://xxxxxxxxxxxxxxx&page=3
.......以此类推
所以在代码中:
baseUrl = http://xxxxxxxxxxxxxxx
后面只需要用for循环改变page的数值就可以了,这样就可以获取所需的页数。
我爬取的网页的规律是 图片地址在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('结束')