• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Article_Crawler: 一个用于博客、咨询等网站文章爬取的爬虫框架

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

Article_Crawler

开源软件地址:

https://gitee.com/Flying_Cat/Article_Crawler

开源软件介绍:

Article_Crawler

项目介绍

一个用于博客、咨询等网站文章爬取的爬虫框架。

项目文件夹结构

  • config/ 配置文件目录
  • crawlers/ 爬虫文件目录
  • log/ 日志文件目录
  • utils/ 工具类文件目录

爬虫说明

网站文章的爬取主要分为两步:

  1. 从网站中获取所有文章的url
  2. 根据文章url获取其标题、内容等数据

在第一步中,网站又分为两类:

  1. 通过页码拼接实现分页的网站
  2. 动态加载页面的网站

这两类网站需要通过不同的方式去获取其所有文章的url,在配置文件的mode字段进行设定以便爬虫框架进行相应处理(pagination、dynamic loading)。

配置文件说明

通过页码拼接实现分页的网站

说明

[网页名称]mode=paginationpage_name=网页名称page_url=网页url地址page_pagination_url=分页部分的拼接地址start_pagination_number=开始分页的页码page_is_end=判断网页分页是否结束的方法(404|single page|xpath路径)article_xpath=文章在HTML代码中的标签的xpath路径article_url_xpath=文章url在HTML代码中的标签的xpath路径start_article_number=文章在HTML代码中的标签的开始编号end_article_number=文章在HTML代码中的标签的结束编号article_number_gap=编号间隔title_xpath=文章标题的xpath路径content_xpath=文章内容的xpath路径detail_splice_flag=爬取文章详情时,url是否需要拼接(true|false)splice_base_url=拼接的基础url

page_is_end字段有三个选项:

  1. 404(表示网页分页结束时,返回404错误)
  2. single page(表示网页只有一页,无需分页,此时page_pagination_url字段可为空,start_pagination_number字段的值必须大于1)
  3. xpath路径(表示网页分页结束时,指定的xpath路径没有数据)

detail_splice_flag字段有两个选项:

  1. true(表示爬取文章详情时,从网站获取的文章url需要与splice_base_url字段中的url进行拼接)
  2. false(表示无需拼接)

例如网站http://me.tryblockchain.org

获取到的文章url为bitcoin-blockchain-misunderstand.html,而该文章的真实地址为http://me.tryblockchain.org/bitcoin-blockchain-misunderstand.html

因此需要进行拼接。

如果不需要拼接,splice_base_url字段可为空。

样例

[me_tryblockchain_org]mode=paginationpage_name=me_tryblockchain_orgpage_url=http://me.tryblockchain.org{0}page_pagination_url=/all_{0}.htmlstart_pagination_number=2page_is_end=404article_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[{0}]article_url_xpath=/a/@hrefstart_article_number=1end_article_number=20article_number_gap=1title_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[1]/h1/text()content_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[2]detail_splice_flag=truesplice_base_url=http://me.tryblockchain.org/{0}

注意page_urlpage_pagination_url字段中的{0},这是python进行字符串格式化所必须的写法,如上述样例中,该网站第二页的真实url为http://me.tryblockchain.org/all_2.html

详情请查看python的format()函数,splice_base_url字段中的{0}同理。

对于网站中一个页面的所有文章,一般而言它们的xpath路径都是有规律的,只是最后的编号不同,article_xpath字段中的{0}代表文章在网页HTML代码中的标签的顺序编号。

例如在上述样例中,一页有20篇文章,//*[@id="main-content"]/div[1]/div[1]/div/div[1]表示第一篇文章在HTML代码中的标签的位置,//*[@id="main-content"]/div[1]/div[1]/div/div[20]表示最后一篇文章在HTML代码中的标签的位置(如不理解请自学一下xpath的相关知识),因此文章编号的起始是1,结束是20,间隔是1,体现在配置文件中如下所示:

article_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[{0}]article_url_xpath=/a/@hrefstart_article_number=1end_article_number=20article_number_gap=1

article_xpath字段中的{0}在爬取时将使用文章编号进行替换,以达到遍历所有文章的目的。

article_url_xpath为文章url在HTML代码中的标签的xpath路径,一般而言它是在文章xpath路径指代的HTML标签内部,因此只需填写拼接部分即可,例如上述样例中,文章url的真实xpath路径为//*[@id="main-content"]/div[1]/div[1]/div/div[{0}]/a/@href。同理,{0}在爬取时将使用文章编号进行替换,以达到遍历的目的。

title_xpathcontent_xpath分别代表爬取文章详情时,文章标题和内容的xpath路径,根据HTML代码结构填写即可。

动态加载页面的网站

说明

[网页名称]mode=dynamic loadingpage_name=网页名称page_url=网页url地址request_method=网页请求方式(get|post)request_param=网页请求参数page_is_end=判断网页分页是否结束的方法(404|single page|xpath路径)article_xpath=文章在HTML代码中的标签的xpath路径article_url_xpath=文章url在HTML代码中的标签的xpath路径start_article_number=文章在HTML代码中的标签的开始编号end_article_number=文章在HTML代码中的标签的结束编号article_number_gap=编号间隔title_xpath=文章标题的xpath路径content_xpath=文章内容的xpath路径detail_splice_flag=爬取文章详情时,url是否需要拼接(true|false)splice_base_url=拼接的基础url

request_method字段有两个选项:

  1. get(表示网页请求方式为get)
  2. post(表示网页请求方式为post)

request_param字段表示网页请求时的参数,写法按python字典形式,详见下面的样例。

配置其余字段同上文所述。

样例

[oschina_net_u_3782027]mode=dynamic loadingpage_name=oschina_net_u_3782027page_url=https://my.oschina.net/u/3782027request_method=getrequest_param={{'catalogId': 0, 'q': '', 'p': {0}, 'type': 'ajax'}}page_is_end=//*[@id="newestBlogList"]/div[1]/div[1]article_xpath=//*[@id="newestBlogList"]/div[1]/div[{0}]article_url_xpath=/div[1]/a/@hrefstart_article_number=1end_article_number=20article_number_gap=1title_xpath=//*[@id="mainScreen"]/div/div[1]/div/div[2]/div[1]/div[2]/h1/text()content_xpath=//*[@id="articleContent"]detail_splice_flag=falsesplice_base_url=

注意request_param字段,必须将字典首尾的花括号加倍,否则format()函数格式化字符串时会有问题。

请求参数字典中的p字段代表翻页参数,因此也需要使用{0}填写以便爬虫进行遍历。请求参数字典的配置因网站而异,需要具体网页具体分析。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap