网络爬虫或蜘蛛解析页面

page-parser的Python项目详细描述


Build StatusGitHub

项目简介

项目名称:六行代码写爬虫

英文名称:PageParser

项目简介:一个爬虫使用的网页解析包,实现最大限度的代码复用

项目目标:不懂网页解析也能写爬虫

安装模块

pip install page-parser

最小项目示例:

importrequestsfrompage_parserimportBaiduParser# 1、下载网页response=requests.get("https://www.baidu.com/")html=response.content.decode("utf-8")# 2、解析网页items=BaiduParser.parse_index(html)# 3、输出数据foriteminitems:print(item)# {'title': '百度一下,你就知道'}

支持网页

序号网站网页名称网页地址
1百度主页https://www.baidu.com/
2豆瓣电影 正在热映https://movie.douban.com/
3拉勾招聘职位列表页https://www.lagou.com/zhaopin/
4企查查融资事件页https://www.qichacha.com/elib_financing
5西刺代理主页http://www.xicidaili.com/
6西刺代理国内高匿代理http://www.xicidaili.com/nn/
7西刺代理国内普通代理http://www.xicidaili.com/nt/
8西刺代理国内HTTPS代理http://www.xicidaili.com/wn/
9西刺代理国内HTTP代理http://www.xicidaili.com/wt/
10搜狗搜索微信公众号搜索页https://weixin.sogou.com/weixin?type=1&query=百度
11煎蛋网主页列表http://jandan.net/
12伯乐在线python栏目http://python.jobbole.com/

使用示例

# -*- coding: utf-8 -*-importrequestsfrompage_parserimportBaiduParser# 1、下载网页url="https://www.baidu.com/"response=requests.get(url)response.encoding=response.apparent_encoding# 2、解析网页items=BaiduParser.parse_index(response.text)# 3、输出数据foriteminitems:print(item)# {'title': '百度一下,你就知道'}

网络爬虫工作流程:

页面下载器 -> 页面解析器 -> 数据存储

页面下载器: 主要涉及防爬攻破,方法各异,爬虫的难点也在此

页面解析器: 一般页面在一段时间内是固定的,每个人下载页面后都需要解析出页面内容,属于重复工作

数据存储: 不管是存储到什么文件或数据库,主要看业务需求

此项目就是将这项工作抽离出来,让网络爬虫程序重点关注于:网页下载,而不是重复的网页解析

项目说明

此项目可以和python 的requests 和scrapy 配合使用

当然如果要和其他编程语言使用,可以使用flask等网络框架再次对此项目进行封装,提供网络接口即可

发起人:mouday

发起时间:2018-10-13

需要更多的人一起来维护

贡献代码

贡献的代码统一放入文件夹:page_parser

代码示例,如没有更好的理由,应该按照下面的格式,便于使用者调用

baidu_parser.py

# -*- coding: utf-8 -*-# @Date    : 2018-10-13# @Author  : Peng ShiyufromparselimportSelectorclassBaiduParser(object):"""
    百度网:https://www.baidu.com/
    """@staticmethoddefparse_index(html):"""
        解析主页:https://www.baidu.com/
        2018-10-13 pengshiyuyx@gmai.com
        :param html: {str} 网页文本
        :return: {iterator} 抽取的内容
        """sel=Selector(html)title=sel.css("title::text").extract_first()item={"title":title}yielditemif__name__=='__main__':importrequestsresponse=requests.get("https://www.baidu.com/")response.encoding=response.apparent_encodingitems=BaiduParser.parse_index(response.text)foriteminitems:print(item)# {'title': '百度一下,你就知道'}

说明:

原则:

  1. 按照网站分类建立解析类
  2. 解析方法包含在解析类中 为方便调用需要静态方法
  3. 因为网页解析有时效性,所以必须注明日期

命名规则:

例如:

文件名:baidu_parser
类名:BaiduParser
方法名:parse_index

其他

  1. 必要的代码注释
  2. 必要的测试代码
  3. 其他必要的代码

加入我们

基本要求

  1. python的基本语法 + 面向对象 + 迭代器(yield)
  2. 掌握的库:requests、parsel、scrapy(了解即可)
  3. 解析库统一使用parsel(基于xpath),简单高效,与scrapy无缝衔接
  4. 不太懂也没关系,自己看参考文章,只要愿意学就会,瞬间提升自己

参考文章:

  1. Python编程:class类面向对象
  2. Python编程:生成器yield与yield from区别简单理解
  3. Python爬虫:requests库基本使用
  4. Python网络爬虫之scrapy框架
  5. Python爬虫:xpath常用方法示例
  6. python爬虫:scrapy框架xpath和css选择器语法

联系方式

PageParser QQ群号: 932301512

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java工作的Android KitKat代码在棒棒糖设备上崩溃   java Android以长变量存储文件大小   JavaSpring请求映射映射唯一端点中的所有GET请求   java为什么我的代码告诉我初始化一个已经初始化的变量?   使用IntelliJ IDEA部署java多模块项目   如何让eclipse为Java使用不同的编译器版本?   如何在将行导出到Excel Java时替换默认jtable列值   表达式使用faker生成java姓氏,但只需要字母   Lisp链表仿真Java   java将泛型类型放在何处   java useDelimiter,读取第一个分隔符,然后更改行   java如何正确处理文件中的数字输入?   java组织。springframework。数据领域无法将PageImpl强制转换为   有没有可能让SpringMVCWeb应用程序作为嵌入Java和Tomcat的“独立可执行文件”运行?   java Log4j,可在不同文件中写入   java如何设置只在安卓首次发布时出现的活动?   java JFreeChart AutoRange不适用于同一绘图上的多个系列   用汉字声明字符串的java