解决办法:在page=requests.get(url,headers=headers)处设置断点,发现
page的内容为空
所以将return的内容改为page.content
然后就ok了。
代码如下:
在这里插入代码片
# 第一个简单的爬取图片的程序
import urllib.request # python自带的爬操作url的库
import requests
import re # 正则表达式
import random
# 该方法传入url,返回url的html的源代码
def getHtmlCode(url):
# 以下几行注释的代码在本程序中有加没加效果一样,但是为了隐藏自己避免被反爬虫可以假如这个伪装的头部请求
headers = {
'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \
AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36'
}
page=requests.get(url,headers=headers)
return page.content
# 该方法传入html的源代码,通过截取其中的img标签,将图片保存到本机
def getImage(page,page2):
# [^\s]*? 表示最小匹配, 两个括号表示列表中有两个元组
# imageList = re.findall(r'(https:[^\s]*?(png))"', page)
pattern=re.compile(r'(https:[^\s]*?(jpg|png|gif))"')
# imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)
page0=str(page)
imageList = re.findall(pattern, page0)
# x=0
# 循环列表
for imageUrl in imageList:
try:
print('正在下载: %s' % imageUrl[0])
# 这个image文件夹需要先创建好才能看到结果
image_save_path = './image/%d.jpg' % page2
# 下载图片并且保存到指定文件夹中
urllib.request.urlretrieve(imageUrl[0], image_save_path)
page2= page2+ 1
except:
continue
pass
if __name__ == '__main__':
# 指定要爬取的网站
# x=0
for pag in range(4000):
# url ="https://www.mmm131.com/xinggan/4071_1{}_1.html".format(pag)
# https: // www.mm131.net / xinggan / 4071_17.html
# url ='https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C/14{}'.format(pag)
url = 'https://www.mmm131.com/xinggan/5766_4{}.html'.format(pag+2)
# 得到该网站的源代码
page2=pag*100
page = getHtmlCode(url)
# 爬取该网站的图片并且保存
getImage(page ,page2)
# getImage(url, page2)
# print(page)