zoukankan      html  css  js  c++  java
  • 小白学爬虫——爬取今日头条里的图片(三)

    在前面两节我们分别实现了两种网页的爬取方式,总不能我们每次人工判断是什么网页吧?

    这不是我们的风格,我们要让电脑自动来帮我们完成。

    我们来把这个小程序完善一下。

    需求:1、我们可以把网址写在一个文本文件里,让程序自动获取进行爬取。

    2、自动识别网页进行图片爬取。

    go...................

    一、把网址写在一个文本文件里,让程序自动获取

    我们新建 一个文本文件命名为weixin.txt.把所有的网址写进去。

    #此处有坑。weixin.txt必须是utf-8编码。在windows下右键新建文本文档是不行的(百度说这样建的文本文档是gbk编码),我只能用笨办法写一个python脚本,生成一个utf-8的weixin.txt.方法自己百度。

    然后读取weixin.txt

    def read_text():
        """ 文件和源码必须放在一个文件夹里 """
        with open('weixin.txt', 'r', encoding='utf-8') as f:
            return f.readlines()

    二、爬取两种网页的代码定义成函数

    ef pa_one(url1):
        """获取网页直接显示的图片"""
        s = requests.session()
        headers = {'User-Agent': 'Chrome/63.0.3239.132'}
        req = s.get(url1, headers=headers, verify=False)
        time.sleep(1)
        p = re.compile(r'img src="(.*?)"')
        lst = p.findall(req.text)
        for img_lst in lst:
            res = requests.get(img_lst)
            with open(str(time.time()) + '.jpg', 'wb') as f:
                f.write(res.content)
                time.sleep(0.3)
    
    
    def pa_two(url2):
        """爬取一页只显示一张图片的网页"""
        s = requests.session()
        headers = {'User-Agent': 'Chrome/63.0.3239.132'}
        req = s.get(url2, headers=headers, verify=False)
        time.sleep(1)
        html = req.text
        r = re.compile(r'http:(.*?)\"')
        lst = r.findall(html)
        for x in range(0, len(lst), 4):
            img_url = re.sub(r'\', '', lst[x])
            img_url = r'http://' + img_url[2:]
            res = requests.get(img_url)
            time.sleep(0.5)
            with open(str(time.time()) + '.jpg', 'wb') as f:
                f.write(res.content)
                time.sleep(0.3)

    三、自动识别网页类型进行爬取

    听起来是不是很高大上,其实说穿了很简单的。那就是try.....except...也就是异常处理

    原理就是:这个爬不到,我就用另一个。

    代码如下:

    if __name__ == '__main__':
        urls = read_text()
        for url in urls:
            url = re.sub(r'
    ', '', url)#把读取的weixin.txt每行中的换行符去掉,否则爬不到见容
            print(url)
            try:
                pa_one(url)
                time.sleep(1)
                print('爬取成功!')
            except Exception:
                try:
                    pa_two(url)
                    time.sleep(1)
                    print('爬取成功!')
                except Exception:
                    print('爬取失败!')

    是不是很简单啊!

    总结:1、要想写爬虫还要学js/html/requests/re等,学无止境

    2、python高级用法真的很有用,还要认真的学

    3、正则是个好东西

    以上是我的一个学习过程,其中还有很多不足之处,请大家多提意见,帮助我进步,谢谢!

  • 相关阅读:
    Python3-shutil模块-高级文件操作
    Python3-sys模块-解释器相关参数与函数
    Python3-os模块-操作系统的各种接口
    Python3-算法-冒泡排序
    Python3-re模块-正则表达式
    Python3-算法-递归
    Python3-设计模式-迭代器模式
    Python3-设计模式-装饰器模式
    PTA 7-28 搜索树判断(镜像二叉搜索树的后序遍历)
    PTA 7-26 Windows消息队列(小顶堆+输入优化)
  • 原文地址:https://www.cnblogs.com/LoveBeautiful/p/10031140.html
Copyright © 2011-2022 走看看