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、正则是个好东西

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

  • 相关阅读:
    最佳内存缓存框架Caffeine
    18个Java8日期处理的实践,太有用了
    windows 2003 IIS FTP 530 home directory inaccessible
    关闭应用程序(主程序)(WPF)
    解决Win8.1 IE11兼容性问题的方法
    Web页面性能测试工具浅析
    JS模板引擎handlebars.js的简单使用
    mvc4+entityFramework5 发布时遇到的纠结问题
    sqlserver 导入数据出现 无法创建 OLE DB 取值函数。请查看列元数据是否有效
    正则基础之——贪婪与非贪婪模式
  • 原文地址:https://www.cnblogs.com/LoveBeautiful/p/10031140.html
Copyright © 2011-2022 走看看