• 爬取知名社区技术文章_分析_1


    软件运行环境是什么?

           python 3.50                                      -- 解释器

           scrapy库                                         -- 爬虫框架

           pymsql库                                         -- 连接mysql数据库

           pillow库                                           -- 下载图片

    目标网站是什么?

           伯乐在线:http://blog.jobbole.com/  所有的技术文章

    需要爬取哪些数据?

           文章对应的url             cont_url                              varchar(512)

      文章标题                     title                                     varchar(36)

      文章发布时间              publish_time                      data(1970-1-1)

      文章内容                     cont                                    longtext

      对应图片url                img_url                               varchar(512)

      下载对应的图片           scrapy带的下载器

      文章点赞数                  like_num                            int(12)

      文章收藏数                  collection_num                  int(12)

      文章评论数                  comment_num                  int(12)

           对于这些数据如何设计表?

                  每个数据都是文章的详情页面的唯一数据,不存在冗余数据,所有一张表就可以了

                  表名:jobbole_article

                  主键:把文章对应的url进行md5处理,做primarykey      varchar(64)

           事先把数据表建立起来,pymysql只需要插入数据就行了

    如何进行事先分析?

      打开这个域名,浏览一下网页,分析网页的域名设计,分析有没有显示全部文章的url,发现 “最新文章” 这个链接地址,直接把所有的文章都显示出来,就以这个为起始网页,这个网站为:http://blog.jobbole.com/all-posts/

      分析这个网页可以获得的数据,发现可以获得详情文章页面url有20个、文章对应的图片、下一页的url,通过详情页面,进入可以爬取符合需求的值,通过下一页url,就可以获取下一页的所有文章详情的url

      边界值分析:

        试着点开第二页,分析上一页url和下一页url区别

        试着点到最后一页,发现没有下一页url,这时爬虫应该结束了,需要对爬取下一页的url进行逻辑判断处理

    如何逻辑实现?

    1. 定义一个函数在http://blog.jobbole.com/all-posts/页面中解析详情文章页面所有的url,交个scrapy下载器去下载,并把下载好的页面交个另外解析函数去获取有效字段,解析获取的图片url,交给scrapy图片下载器去下载
    2. 获得初始数据,然后对初始数据进行格式化处理,去脏处理,获取有效数据
    3. 把有效的字段,通过pymysql连接数据库,并写入数据库

    逻辑结构如何?

           该爬虫分为:5个逻辑结构

                  解析文章简介页面             

                  解析文章详情页面

                  获得原始数据

                  数据去脏处理

                  写入数据库(通过gevent的协程实现存储)

    出现的问题?

           如何异步实现数据库的插入?

        通过协程实现对数据的插入

           如何自动下载图片并且获得图片下载的路径?

        通scrapy自带下载器,和重新定义scrapy的imagepipeline中一个方法获得

      

  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7219836.html
Copyright © 2020-2023  润新知