初级爬虫(一) requests模块实现网页批量图片爬取

版权声明:欢迎copy,只求有用 https://blog.csdn.net/muzhe1024/article/details/85239312

思路分析:
已知网页:如http://www.jiangxian.gov.cn/N20180821093426.html
1, 检查网页分析网页中图片的地址形式,
2,获取网页内容,正则匹配出所有图片的地址,
3,拼接地址生成列表
4,循环列表,生成图片地址的文本文件
5,循环列表,取出每个地址,获得地址内容
6,写入到文件夹

难点:首先是获取每个图片的地址____这是一个获取过程
再次 获取图片____相当于获取另一个网页的过程

代码如下:

import requests
import re

#请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
#基础地址
url = "http://www.jiangxian.gov.cn/N20180821093426.html"
#从网页右键检查看到的图片地址格式
# <P align=center><IMG src="/upload/20180821100128526.jpg"></P>
#正则分析: src="(/upload/.*?)
#初次获取原始网页内容
response = requests.get(url, headers=headers)
#输出网页内容
htm = response.content.decode('gbk')
#在网页内容中匹配图片的标签(注意正则的引号,外单内双)
list1 = re.findall('src="(/upload/.*?)"', htm)
#拼接图片真实地址,可以在浏览器中点击图片查看地址拼接形式,列表推导式
list2 = ['http://www.jiangxian.gov.cn/' + i for i in list1]

#将地址保存成文本,注意需要循环遍历
with open('tu/tu.txt', 'w')as f:
    for t in list2:
        f.write(t+'\n')

#然后继续遍历列表2, 重新获取网页内容,分别提取每个网页的内容输出成图片
for u in list2:
    resp = requests.get(u, headers=headers)
    img = resp.content
    #命名 (难点是字符串和int类型的值之间的转换)
    name = 'tu' + str(list2.index(u)) + '.jpg'
    # print(name)测试
    #拼接图片库地址
    path = './tu/' + name

    File = open(path, 'wb')
    File.write(img)
    File.flush()
    File.close()


    #写入的另一种形式
    # with open(path, 'wb')as w:
    #     w.write(img)

#问题: 怎么实现边读取边写入?运行发现是全部读取完后一次性写入 ,不科学啊 ,目前不知道怎么解决

结果

猜你喜欢

转载自blog.csdn.net/muzhe1024/article/details/85239312