爬取今日头条街拍图片

前言

本博客主要记录跟随崔庆才老师的分析Ajax抓取今日头条街拍美图学习的整个过程,更多精品文章,请参阅崔老师的博客,再次感谢崔老师教导。

3月15日更新,14日代码敲完了,今天主要总结整个过程

啰嗦心得

  • 个人觉得在掌握了Python的基础的前提下,爬虫的难点在于两点:

    • 分析网页结构,看要获取的数据获取的方式
    • 利用语言知识去匹配或者利用其它的方法,比如ajax等发起请求获取数据等等
  • 这两点前者更为复杂,因为有的网页比如本例中,街拍的索引页面的详情页面中,详情的数据是在页面的一个js的变量中,但是在我跟随视频学习的过程中发现,此时的页面很多已经不是存在一个变量中,而是存在于标签中,说明页面是有过改版,此时同一个详情页面就不能一概而论,要写不同的方法处理,不过由于爬虫功底还很薄弱,所以对于存在于标签中的链接,我并没有处理,而是进行了过滤,待到基础比较扎实以后,会对代码进行更新(March 15

开始爬取

索引页面

  • 前期要求

简单来说此次抓取氛围两部分,一部分是图片的索引页面,另外一部分是通过点击索引进入详情页面,抓取具体的图片的地址,并将其存储,最后下载图片资源

  • 索引页面分析

跟随视频学习,打开谷歌的工具查看索引页面的源代码,没有看到和素材相关的资源,这里略总结一下,以目前自己所学的这点知识,想要的链接信息主要存在于一下三方面的元素中

  • 存在于HTML的标签的链接中

  • 存在于CSS样式中

  • 存在于 页面的js代码中

  • 存在于ajax的请求中(索引页面就是这种)

  • 索引页数据分析

    • 通过分析所以页面是通过ajax请求获取到的,通过Google浏览器的工具filter工具的XHR过滤项可以看出


      xhr.png
    • 索引页面数据分析,参看下图


      data

      具体索引链接
    • 经过分析是通过ajax请求,获取回来的数据,其中article_url就是进入详情页面的链接,我们通过构建一个ajax请求,然后获取返回数据,在获取字段
  • 索引页抓取

    • 构建ajax请求获取数据

    • 代码 <b>由于markdown格式问题,我就不粘贴代码,用图片代替,博客末尾我会附上代码地址

      索引页面数据获取

    • 代码分析

      • data:是ajax的所需要的参数,这个参数是参看XHR中的


        参数
      • url : baseUrl + 经过转码的参数,成为完整的url【get请求】,其中转码函数urlencode包含在你from urllib import urlencode
      • 请求:本次的请求框架是requests,我一直以为requests是Python的原生库,其实属于第三方框架 ,故安装sudo pip install requests,导入import requests,具体访问参见代码
    • 解析索引页面返回的json数据

      • 根据之前的分析,ajax请求返回值的数据类型是json,故利用Python内部的json模块就可以解析import json
      • json 解析完成以后,就可以根据节点取出相应的值,通过遍历数据返回一个首页的索引的ur列表


        索引数据解析

详情页面

  • 详情页面分析

经过分析,在图片的详情页面图片数据是存储在页面的 var gallery变量中,这变量后面也是一个json数据,所以我们经过正则匹配来或者这个变量后边的json数据

  • 详情页面抓取
    这个比较简单,根据索引页的url,进行页面获取,与索引页的获取基本相同


    详情页面获取
  • 详情页面解析
    这里要做的工作就是在页面中通过正则匹配找到var gallery,然后获取后面的json数据
    gallery后边的json数据结构

    详情页面解析
    • 由于详情页面就是普通的HTML页面,可以通过BeautifulSoup框架解析, BeautifulSoup框架需要通过pip安装,然后导入from bs4 import BeautifulSoup
  • 将匹配完获取的数据用json框架进行解析,由于图片数据是一个数组,故需要遍历取值
  • 返回一个数组,包括详情页面的标题,详情页面的url,图片的url数组

存储到数据库

  • 下载安装mongoDB,这里不赘述
  • 配置mongoDB,可以参见我的博客
  • pycharm配置mongoDB
    • 创建config.py配置文件,然后配置一些参数,包括主机,数据库名,表名


    • 创建数据库,主要利用pymongo(import pymongo)框架,因为研究的不是很彻底,这里只写一些简单的代码,不要忘记导入配置文件from config import *
      创建数据库
    • 存储数据


      存储数据

下载图片

  • 通过url下载图片数据,是Python相关知识,不赘述


    下载图片
  • 将图片数据转换为图片


    转换数据

将以上代码整体串接调用

def main(offset):
    html = get_page_index(offset, KEYWORD)
    for url in parse_page_index(html):
        detail = get_page_detail(url)
        # 这里进行一下判断,如果能正常返回在进行解析
        if detail and parse_page_detail(detail, url):
            result = parse_page_detail(detail, url)
            if result:
                save_to_db(result)

if __name__ == "__main__":
       main()

代码地址

最后

无论从接触爬虫还是博客的编写都显得匆忙和粗糙,以后随着知识的完善,博客也会进行相应的更新,希望大家不吝赐教,提出问题指正,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 拍照或拍视频视频后,扫描把文件添加到系统媒体库,也就是更新系统图库/相册,以便使用ContentResolver查...
    lioilwin阅读 5,755评论 0 4
  • 我的心 在空中游动 寻找一个怒放着山茶花的山麓 抑或 一个散发着紫罗兰芬芳的幽谷 静静地扎根 然后 生成一团火 化...
    格尔黑阅读 314评论 14 30