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

思路分析:
已知网页:如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)

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

结果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值