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

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(使用前将#替换为@)

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

  • 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
  • python中html.parser_python模块之HTMLParser简介

    html parser是一个非常简单和实用的库 xff0c 它的核心是HTMLParser类 工作的流程是 xff1a 当你feed给它一个类似HTML格式的字符串时 xff0c 它会调用goahead方法向前迭代各个标签 xff0c 并调
  • Cannot find module 'body-parser'

    bug Cannot find module 39 body parser 39 原因很明显 xff0c 这个模块是没有的 xff0c 查看node modules目录下 xff0c 确实没有 解决办法 xff1a 重新安装这个模块 xff
  • 使用http_parser解析URL

    用C语言编写http应用 xff0c 解析URL是一个繁琐的事儿 前几天使用http parser实现httpclient xff0c 发现里面提供了一个解析URL的方法http parser parse url xff0c 用起来相当方便
  • Cannot find module ‘body-parser‘

    node modules下模块缺失 解决方案 xff1a npm install span class token operator span save body span class token operator span parser
  • 资源调度器的一些基本问题

    1 调度算法 Capacity based DRF dominant recourse fairness label based等 多态化 插件化 可以多种策略一起工作 对应于不同Job 优先级 job特性 service or batch
  • 爬虫中网页分析的几种技术

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

    至少有4种背包问题 1 01背包 2 部分背包 3 完全背包 4 多重背包 只有部分背包是个贪心问题 其他的都是以01背包为基础的动归问题 部分背包问题 把物品按价值密度从大到小排序 W i V i 然后从第一种物品开始 尽可能多拿当前物品
  • random_queue:支持push, popRamdom的数据结构

    pop哪一个元素 决定了queue stack priority queue的不同 新加一个random queue 等概率的从集合里取出一个元素pop 1 先用rand int l int r 得到一个随机位置 2 和top交换 3 to
  • 二叉树 level order 遍历问题汇总

    一 如何确定层结束 1 维护一个levelEnd 如果当前结点等于level end 更新levelEnd 为queue back 注意先判断queue是否empty 最后一层结束后 queue就空了 2 维护一个curLevelNum 和
  • 搜索提示是如何实现的

    经典的想法就是一个Trie的 keysWithPrefix 问题 更高级的 进一步考察 keysWithPrefix需要做prefix下的inOrder遍历 但是每当用户type下一个字符 那个提示列表瞬间就显示出来了 不像是遍历很大一棵树
  • Regular Expression实现

    主要分2大块 核心部分 就是一个NFA 只支持标准正则的操作 concatenation union iteration 限定上限的iteration 对应的meta character只有 upper 扩展部分 这部分是把扩展正则表达式转
  • 大数据问题汇总

    1最基本的 一个数据流 文件 求top k biggest solution 维护大小为K的最小堆 和堆顶比 大于堆顶的加入堆 堆顶相当于准入门槛 如果size 超过K 移除堆顶 vector
  • 基于HashHeap的LFU实现

    普通heap支持的操作和queue stack一样 就是push pop 只是pop出的是最小值 具体点就是add delMin hashheap支持一般HashMap的功能 同时维护最小值 和LinkedHashMap是对等的 后者是Ha
  • 面向对象OO 设计、架构终极理解, 以及如何学习一个领域

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

    一般排序是数据 doc resultItem 取出来之后 按某个某个字段的值排序 也就是必须拿到doc resultItem之后才能排序 mds排序的特点是在取resultItem之前就排序 不是对resultItem排序 而是对docId
  • 再谈缓存

    凡是涉及管理数据的系统 都可以用图书馆来考虑 都要面临图书的位置查找和实际摆放两个问题 对应的两大组件就是就是index store 所有的数据管理系统都包含这两部分 缓存从过期又什么触发的角度分为容量触发和时间触发 容量触发 就是缓存满了
  • 有限自动机总结

    有限自动机A用来识别字符串 它由5部分组成 1 alphabet 字符集 2 states 状态集合 3 init 初始状态 4 trans s ch 状态转移函数 5 end 可接受state 集合 A str true的意思是 A可以接
  • 递归、加法原理,如何分解问题(独立且完备的划分)

    加法原理适用于做一件事有n种独立不相交且完备的方向 每个方向上有ai种方案 则总的方案数就是 a1 a2 an 例题 把n个数分为k个非空子集 有多少种分法 分解问题 第一个集合里放多少个数把原问题的解分成了独立且完备的若干方向 分别解每个

随机推荐