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

    上一节我们爬取的网页是要下载的图片在一个页面全部展示出来。

    在今日头条里还有一种网页是一张一张的展示图片,要想看下一张图片必须点一下才能看。

    今天我们就把这种网页图片给爬下来。

    go......

    一、首先我们分析网页

    这里我给一个网页地址:https://www.toutiao.com/a6620381685949137415/

    按F12进入开发者模式

    点一下左上角的小箭头先看两张图片

    我们会发现即时我们不打开图片,也能得到所有图片网址,也就是<li>里面的网址。

    好了我们开始写代码,把它提取出来

    #导入模块
    import requests
    from bs4 import BeautifulSoup
    import re
    import time
    
    s = requests.session()#建立连接
    headers = {'User-Agent': 'Chrome/63.0.3239.132'}#设置headers让网站认为我们是在用浏览器访问
    req = s.get(url, headers=headers, verify=False)#获取网页内容
    time.sleep(1)#停一下,免得网速不行,不能得到网页内容
    html = req.text
    print(html)#把获取的网页内容打印出来

    运气不错获取到了内容。

    二、把获取到内容用正则表达式提取出来

    大家可能会部为什么用正则,因为我现在只会正则(汗...................)

    首先我们分析得到的内容,我们会发现这个网页我们根本无法使用BeautifulSoup提取到里面的元素,查资料吧,网上有一大堆的方法,有使用无头浏览器再次渲染,但是这个学习成本真的很大,留在以后慢慢学吧。

    还是使用我们的正则,简单粗暴有效,哈哈.............

    经过观察获取的见容,我们发现这很像一个字典啊,没错这就是传说中的json数据。

    那么怎么提取这个json数据呢?

    我用正则,可是.....................

    再来认真的学一下正则吧(1小时过去了,)试试了很多表达式不行,看来我还是要再学习啊!

    可是领导正催着要呢,再说还要显示出咱的效率不是?

    我再看,再看,再看....................有了

    没错,所有的图片网址都是以http开头的。你说你怎么知道是这些网址啊?当然是和我们一开始在开发者模式里看到的网址一样才知道的。

    我们来试试

    r = re.compile(r'http:(.*?)\"')
    lst = r.findall(html)
    print(lst)

    没错就是它。

    接下来就是不断的进行调试,最终得到正确的网址。

    最终代码如下:

    import requests
    import re
    import time
    
    
    
    def pa_two(url):
        s = requests.session()
        headers = {'User-Agent': 'Chrome/63.0.3239.132'}
        req = s.get(url, headers=headers, verify=False)
        time.sleep(1)
        html = req.text
        print(html)
        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.1)
    
    
    if __name__ == '__main__':  # read_text()
        pa_two('https://www.toutiao.com/a6620381685949137415/')

    好了。至此这类活动显示的图片也成功的爬取了。

    真的很有成就 感!就是太累了!

  • 相关阅读:
    RocketMQ之二:分布式开放消息系统RocketMQ的原理与实践(消息的顺序问题、重复问题、可靠消息/事务消息)
    Redis 发布/订阅机制原理分析
    Guava 12-数学运算
    Guava] 11
    Guava 10-散列
    Guava 9-I/O
    Guava 8-区间
    mat(Eclipse Memory Analyzer tool)之二--heap dump分析
    Python流程控制语句
    监控和管理Cassandra
  • 原文地址:https://www.cnblogs.com/LoveBeautiful/p/10030989.html
Copyright © 2011-2022 走看看