小白学爬虫——爬取今日头条里的图片(三)

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

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

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

需求: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'\n', '', 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、正则是个好东西

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

猜你喜欢

转载自blog.csdn.net/daxia5398/article/details/84581592
今日推荐