zoukankan      html  css  js  c++  java
  • 爬取知名社区技术文章_分析_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中一个方法获得

      

  • 相关阅读:
    最短路径之spfa
    最短路径之Bellman-Ford——解决负权边
    最短路径之Floyd-Warshall算法
    图上最短路径问题
    它们其实都是图(二分图)
    记忆化结果再利用 进一步探讨递推关系
    leetcode 376. 摆动序列 java
    leetcode 368. 最大整除子集 java
    leetcode 96. 不同的二叉搜索树 java
    leetcode 454. 四数相加 II java
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7219836.html
Copyright © 2011-2022 走看看