美文网首页
今日头条图集爬取(第二节)

今日头条图集爬取(第二节)

作者: Houtasu | 来源:发表于2018-07-30 22:30 被阅读0次

    在上节中,我们已经写下了爬虫流程。
    在这节中,我们就来实现这个流程

    上节中,我们获取了json文件,这个文件中储存着我们需要的图集id值。而json链接中的offset值代表着不同的页面(虽然看起来都在一页中,它是动态加载的内容)。那么我们首先要构造不同的url,来获取这些json文件。

    def get_page_list():
        json_url = 'https://www.toutiao.com/search_content?'
        group_id = []
        for i in range(3):
            full_json_url = json_url + 'offset=' + str(
                i * 20) + '&format=json&keyword=bilibili&autoload=true&count=20&cur_tab=3&from=gallery'
            r = requests.get(full_json_url)
            json_content = json.loads(r.text)
            for i in json_content['data']:
                group_id.append(i['id'])
        return group_id
    

    由于只有offset是不同的,我们只需修改这个值然后把前后相同的连接起来就好,在requests库有构造参数的方法,字符串其实也是一样的,这里就先使用字符串吧。然后我们通过requests库的get方法就获取到了json文件了。
    接下来要使用到json库,我忘了json是内置的还是要安装的了。如果是需要安装的话使用pip安装就好。我个人喜欢使用anaconda+pycharm做为python的编写环境,可以减少很多安装库的麻烦。
    用json.loads可以加载json文件,并且返回的是字典类型。
    至于字典的内容就自己用print打印出来看吧。
    然后找到ID值并添加到一个列表中,这样我们就获得了搜索页面的图集id了,而且不止一页。这里我只循环了3次,所以一共是3*20=60个图集的id。
    获取ID值后,我们又需要构造图集的url地址,直接在前面加上https://www.toutiao.com/a就好了。

    ef get_one_page(group_id, pic_list):
        url = 'https://www.toutiao.com/a'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'}
        for i in group_id:
            picture_url = url + str(i)
            r = requests.get(picture_url, headers=headers)
    

    接下来就是获取具体的图片链接了。
    我们来到图集的页面。f12点左上角的箭头,再选中图片。


    image.png

    可以看到有很多li标签,还有Img标签,并且在img标签中,可以看到有图片的链接,复制这个链接就可以查看图片了。
    然后我们在图集页面右键查看源代码,发现这和我们在f12的element中看到的不一样。正常情况下我们只需用beautifulsoup解析出img的src属性就可以获得链接了。但是这个网页使用JavaScript加载的。并没有li标签和img标签给我们来解析。但是在源代码中仍然保存着图片的地址。


    image.png
    这里的url就是啦。
    那么我们要怎么获取这些url呢?
    我们可以使用正则表达式。
     pre = re.compile(r'pb9.pstatp.com\\\\/origin\\\\/[\w]+')
            p_list = pre.findall(r.text)
    
    image.png

    我们成功获取到了图片的链接,这些链接使用requests获得的就是图片了,不需要我们再去解析html了。
    接下来保存这些文件就大功告成了(p≧w≦q)

    group_id = get_page_list()
    pic_list = []
    get_one_page(group_id, pic_list)
    file_dir = r'D:\toutiao-picture\\'
    for index, pic in enumerate(pic_list):
        with open(file_dir + str(index) + '.jpg', 'wb') as f:
            f.write(pic)
    

    爬取结果:


    image.png

    源代码可以查看我的github地址
    https://github.com/HOUTASU/crawler_pycharm

    相关文章

      网友评论

          本文标题:今日头条图集爬取(第二节)

          本文链接:https://www.haomeiwen.com/subject/puyqvftx.html