看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具。正好我刚学习Python,就决定自己练习一下。写了一下,原本觉得很简单的东西,搞了半天才终于搞定,看来纸上得来终是浅,勤加实践才是王道。虽然花了不少时间,但是感觉自己收获还是蛮大的。

这段代码的知识点包括以下几个:

  1. 列表的使用;
  2. 自定义全局函数的写法;
  3. 自定义类及继承类的写法;
  4. 标准模块的使用
  5. 异常处理

下面看代码。

先是导入用到的标准模块:

import html.parser as parser
import urllib.request

然后是分析网页中网址的类定义:

 1 class MyHtmlParser(parser.HTMLParser):
 2     def __init__(self, lst = None):
 3         super().__init__()   #这里容易漏掉导致出错
 4         if not lst:
 5             self.urls = []
 6         else:
 7             self.urls = lst
 8
 9     def handle_starttag(self, tag, attrs):
10         for attr, value in attrs:
11             if "http" in value and ".js" not in value \
12             and value not in self.urls:
13                 self.urls.append(value)
14
15     def handle_startendtag(self, tag, attrs):
16         for attr, value in attrs:
17             if "http" in value and ".js" not in value \
18             and value not in self.urls:
19                 self.urls.append(value)

解析网址函数:

1 def ParseUrlsInText(text, lst):
2     pars = MyHtmlParser(lst)
3     try:
4         pars.feed(text)
5     #添加异常处理,可能会遇到各种异常
6     except parser.HTMLParseError as ex:
7         print("parse failed.",ex)  

最后是实现整个功能的函数:

 1 def VisitUrlsInPage(pageUrl):
 2     url_list = [pageUrl]
 3     for url in url_list:
 4         try:
 5             fh = urllib.request.urlopen(url)
 6             data = fh.read()
 7             ParseUrlsInText(str(data), url_list)
 8             #这里是为了快速结束,去掉就变成小爬虫了
 9             if len(url_list) >= 200:
10                 break
11         except urllib.request.URLError:
12             print("Failed.")
13             continue
14     print("length: ", len(url_list))
15     for url in url_list:
16         print(url)
17
18
19 if __name__ == '__main__':
20     VisitUrlsInPage("http://www.cnblogs.com/jason-yang/")

里面的异常处理和对地址的剔除还不完善,对不同的网站运行过程中可能还会有些小问题。

转载于:https://www.cnblogs.com/jason-yang/archive/2012/04/14/2447766.html

Python小应用1 - 抓取网页中的链接地址相关推荐

  1. php 采集邮箱,采集邮箱的php代码(抓取网页中的邮箱地址)

    采集邮箱的php代码(抓取网页中的邮箱地址) 复制代码 代码如下: $url='http://www.jb51.net'; //这个网页里绝对含有邮件地址. $content=file_get_con ...

  2. python获取网页图片_python抓取网页中的图片示例

    python抓取网页中的图片示例 代码如下: #coding:utf8 import re import urllib def getHTML(url): page = urllib.urlopen( ...

  3. Python抓取网页中的动态序列化数据

    Python抓取网页中的动态序列化数据 动态序列化数据经常应用于前后端分离的页面.或者通过VUE.JS等HTML页面环境,常规的爬虫抓取方法并不能满足数据采集的要求,因此需要其他的方式进行数据的采集. ...

  4. php正则获取li,用正则表达式抓取网页中的ul 和 li标签中最终的值!

    获取你要抓取的页面 const string URL = "http://www.hn3ddf.gov.cn/price/GetList.html?pageno=1";       ...

  5. php抓取标签内的内容,php抓取网页中的内容

    以下就是几种常用的用php抓取网页中的内容的方法. 1.file_get_contents PHP代码 代码如下:>>>>>>>>>>> ...

  6. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  7. 利用pandas库中的read_html方法快速抓取网页中常见的表格型数据

    利用pandas库中的read_html方法快速抓取网页中常见的表格型数据 本文转载自:https://www.makcyun.top/web_scraping_withpython2.html 需要 ...

  8. 一个用php抓取网页中电子邮箱的实例

    原文出自: http://outofmemory.cn/code-snippet/36020/php-how-zhuaqu-wangye-youxiangdizhi-code php如何抓取网页中邮箱 ...

  9. java抓取页面表格_用java实现爬虫抓取网页中的表格数据功能源码

    [实例简介] 使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作.包解压后导入MyEclipse ...

最新文章

  1. nginx、uwsgi部署django项目理论+实战
  2. 【.NET架构】BIM软件架构02:Web管控平台后台架构
  3. Xftp远程连接出现“无法显示文件夹”的问题补充
  4. 【2016年第4期】研究(国家自然科学基金项目成果集萃)导读
  5. java 优酷视频缩略图_优酷视频缩略图
  6. pydev中使用wxpython找不到路径的问题
  7. 最课程学员启示录:一份有诚意的检讨书
  8. struts2请求过程源代码分析
  9. java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
  10. 从目标文件结构,加载、执行阶段,汇编角度来理解C程序内存分区
  11. 阿里云短信验证第三方接口(快速使用)
  12. 苹果13可以用无线充电宝吗?苹果专用无线充电宝推荐
  13. 还记得2048怎么玩吗?快来玩会儿(摸鱼)吧
  14. JAVA 9中module初探
  15. 【清华大学】深入理解操作系统(陈渝) 第四章
  16. 用canvas画一个太极八卦图
  17. 未来电信业的发展方向 VOIP的中国之路
  18. 物体跟随鼠标移动——图片为gif格式
  19. 李政軒Cheng-Hsuan Li的关于机器学习一些算法的中文视频教程
  20. adb命令行打开Android settings

热门文章

  1. SecureCRT 连接Win10内置ubuntu问题层层突围
  2. kkFileView ---- 文件预览开源项目
  3. android 回退函数,android浏览器研究-回退和前进
  4. android实现字体滚动,Android实现字幕滚动的方法
  5. rabbitMQ碰到了对象跨项目的时候,反序列化出了问题
  6. SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)
  7. matlab练习程序(径向模糊1)
  8. demo10 关于JS Tree Shaking
  9. 50.本地VMware环境虚拟机的异地(Azure)容灾(上)
  10. [CTO札记]第1天:认识人、熟悉环境