爬虫中网页分析的几种技术

2023-10-27

一般来说我们只抓取网页中的特定数据,比如抓取某人所有的blog,我们就只关心list 页面中文章列表那部分的链接和title


有几种技术可以用来分析网页

1)正则匹配

2)一般字符串匹配content.substring(pattern, startIndex),一般是带有startIndex的substring,而不是每次都是从头匹配

3) 基于sax的事件

4)DOM + XPath


抓去的数据有两种

1)基于数据本身的parttern,比如链接、email adrress,适合用正则

2)基于位置。数据本身没什么特别,关键在于在什么位置出现。适合用其他3种,


基于sax事件的最好,流式处理,不需要存储整个网页,缺点是有些网页不规范,sax 要求必须是合法、well formed xml。

substring和正则一般需要先把网页读成字符串,substring更简单轻量级一些,

DOM+xpath太杀鸡用牛刀了


例子,把自己csdn上所有的博文扒下来:

from urllib2 import Request, urlopen, URLError

page, articleList, visited, startOver = 1, [], set(), False
while not startOver:
    req = Request('http://blog.csdn.net/binling/article/list/' + str(page), headers={'User-agent': 'Mozilla 5.10'})
    try:content = urlopen(req).read()
    except URLError, e: break
    pos = 0
    while True:
        try:
            pos = content.index('link_title', pos)
            pos = content.index('href', pos)
            pos = content.index('"', pos)
            end = content.index('"', pos + 1)
            link = content[pos + 1:end].strip().decode('utf-8')
            if link in visited:
                startOver = True
                break
            pos = content.index('>', end)
            end = content.index('</a>', pos)
            title = content[pos + 1: end].strip()
            articleList.append((title.decode('utf-8'), link))
            visited.add(link)
        except: break
    page += 1

home = 'C:\\Personal\\CSDN'
for title, link in articleList:
    for c in '/\*:<>?"|':
        if c in title: title = title.replace(c, ' ')
    content = urlopen(Request('http://blog.csdn.net' + link, headers={'User-agent': 'Mozilla 5.10'})).read()
    with open(home + '\\' + title + '.html', 'w') as f:
        f.write(content)
        print title









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫中网页分析的几种技术 的相关文章

  • Error: Failed to load parser ‘babel-eslint‘ declared in

    解决办法 xff1a 使用手动安装 babel eslint npm i D babel eslint
  • args = parser.parse_args() SystemExit: 2 解决方案

    问题描述 今天运行程序 xff0c 突然报错 xff1a args 61 parser parse args args 61 SystemExit 2 查阅网上解决方案无果 xff0c 于是自己检查了错误信息 xff0c 哦 xff0c 原
  • 使用http_parser解析URL

    转载自 xff1a https www iteye com blog shangxun 2139443 使用http parser解析URL 用C语言编写http应用 xff0c 解析URL是一个繁琐的事儿 前几天使用http parser
  • Http_parser报文解析(转载)

    转载自 xff1a https blog csdn net qq 36482772 article details 80174358
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    转载地址 https blog csdn net jiange zh article details 50639178 对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xf
  • 开源HTTP解析器---http-parser和fast-http

    转载自 xff1a https www cnblogs com arnoldlu p 6497837 html 开源HTTP解析器 http parser和fast http 由于项目中遇到需要发送http请求 xff0c 然后再解析接收到
  • 使用http_parser解析URL

    用C语言编写http应用 xff0c 解析URL是一个繁琐的事儿 前几天使用http parser实现httpclient xff0c 发现里面提供了一个解析URL的方法http parser parse url xff0c 用起来相当方便
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xff0c 所以这一部分不打算自己编写 xff0c 而是使用开源的http parser库 xff0c 下面我们将使用该库来
  • 子串/子段问题总结

    1 一般子串问题 求一个串中满足某种条件的子串 1 如果所求子串的条件是一个值 比如sum 则考虑子段问题 注意这样一个性质 子段 前缀差 子段和 前缀和的差 vector
  • 爬虫中网页分析的几种技术

    一般来说我们只抓取网页中的特定数据 比如抓取某人所有的blog 我们就只关心list 页面中文章列表那部分的链接和title 有几种技术可以用来分析网页 1 正则匹配 2 一般字符串匹配content substring pattern s
  • 中缀表达式求值问题

    1 有无括号 2 一种优先级运算符 只有 或 还是2种 和 都有 3 求逆波兰序列 求值 求表达式树 两种思路 1 分治 求值 和求表达式树都可以用 nlogn 1 先去掉冗余括号 两边最外面的 如 1 1 2 如果有的话 找到优先级最小的
  • 还是搜索、索引的问题

    搜索要弄清2个基本问题 1 要搜索出什么类型的entity 2 entity的哪个方面 维度和关键词发生关联的 一般来说可以有多个角度link到entity 一个entity支持多个索引 可以从不同的column检索 对于 web sear
  • 二叉树 level order 遍历问题汇总

    一 如何确定层结束 1 维护一个levelEnd 如果当前结点等于level end 更新levelEnd 为queue back 注意先判断queue是否empty 最后一层结束后 queue就空了 2 维护一个curLevelNum 和
  • merge sort 一些变种、应用

    1 逆序对数目 分治公式 总的逆序对个数 前半部分逆序对个数 后半部分逆序对个数 merge时候每取一次后半部分的数 累加一次前半部分剩余的数的个数 int countInvertion vector
  • 最大公约数,最小公倍数,素数等问题

    1 两个数的 最小公倍数 等于两个数的乘积除以最大公约数 scm a b a b gcd a b 所以主要是最大公约数问题 gcd 问题 辗转相除法 依据就是欧几里得定理 gcd a b gcd b a b def gcd a b whil
  • 什么是Service, 以及Service 模板

    Service本质就是一个驻留Process 驻留Prcess至少有一个驻留线程 这个线程处在waiting的状态 相对于Runable 控制流停在某个点上 等待外部事件驱动 或者是自己的timer驱动 Windows Service 是一
  • 一致性的3种协议,并发,事务

    Two Phase Commit MVCC Paxos TPC对应于传统数据库上的local cluster的一致性 分布式事务 每个节点上的local事务可以是不同的亦可以是相同的 replica MVCC的思想是抓住Transactio
  • 一个完整的语法分析、词法分析例子——Universal Pasrser

    需求 用户用formal notation指定语法 词法 然后可以匹配相应的文本 用法类似正则表达式 只需给出formal notation 不需要为每一种格式的文本单独写匹配器 formal notation主要是3个部分 1 BNF 列
  • 大数据问题汇总

    1最基本的 一个数据流 文件 求top k biggest solution 维护大小为K的最小堆 和堆顶比 大于堆顶的加入堆 堆顶相当于准入门槛 如果size 超过K 移除堆顶 vector
  • 面向对象OO 设计、架构终极理解, 以及如何学习一个领域

    程序就是一些互相引用的内存快 互相发消息 每个内存块就是一个状态机 状态的迁移规则是定制好的一些消息 方法 构造函数用来初始化状态 一个内存块的方法除了改变自身状态 也有可能向引用的别内存快发消息 引起别的内存块发生状态转移 重点不在过程化

随机推荐