python - 抓取页面上的链接
除了C/C++以外,我也接触过不少流行的语言,PHP、java、javascript、python,其中python可以说是操作起来最方便,缺点最少的语言了。
前几天想写爬虫,后来跟朋友商量了一下,决定过几天再一起写。爬虫里重要的一部分是抓取页面中的链接,我在这里简单的实现一下。
首先我们需要用到一个开源的模块,requests。这不是python自带的模块,需要从网上下载、解压与安装:
$ curl -OL https://github.com/kennethreitz/requests/zipball/master
$ python setup.py install
windows用户直接点击下载。解压后再本地使用命令python setup.py install安装即可。
这个模块的文档我也正在慢慢翻译,翻译完了就给大家传上来(英文版先发在附件里)。就像它的说明里面说的那样,built for human beings,为人类而设计。使用它很方便,自己看文档。最简单的,requests.get()就是发送一个get请求。
代码如下:
# coding:utf-8
import re
import requests
# 获取网页内容
r = requests.get('http://www.163.com')
data = r.text
# 利用正则查找所有连接
link_list =re.findall(r"(?<=href=").+?(?=")|(?<=href=').+?(?=')" ,data)
for url in link_list:
print url
首先import进re和requests模块,re模块是使用正则表达式的模块。
data = requests.get('http://www.163.com'),向网易首页提交get请求,得到一个requests对象r,r.text就是获得的网页源代码,保存在字符串data中。
再利用正则查找data中所有的链接,我的正则写的比较粗糙,直接把href=""或href=''之间的信息获取到,这就是我们要的链接信息。
re.findall返回的是一个列表,用for循环遍历列表并输出:
这是我获取到的所有连接的一部分。
上面是获取网站里所有链接的一个简单的实现,没有处理任何异常,没有考虑到超链接的类型,代码仅供参考。requests模块文档见附件。
- SequenceInputStreamSequenceInputStream构造方法读关流刷新
- 怎么实现关闭窗口
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- 不可不知的一点Python陷阱
- 10个应该早点知道的Python技巧
- 一文读懂如何用 Python 实现6种排序算法
- 5 个很好的 Python 面试题
- Python部署手记:django, gunicorn, virtualenv, circus, nginx
- Python图像处理库:Pillow 初级教程
- 陷阱!python参数默认值
- 怎么样才算是精通 Python?
- 教你一招 | Python实现无向图最短路径
- 教你一招 | Python装饰器的另类用法
- 如何拿到半数面试公司Offer——我的Python求职之路
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 爬虫 | JS逆向某验滑动加密(二)
- 闲聊 Kotlin-Native (0) - 我们为什么应该关注一下 Kotlin Native?
- 哈佛大学单细胞课程|笔记汇总 (五)
- 通过源码理解IGMP v1的实现(基于linux1.2.13)
- 微服务下数据一致性的几种实现方式
- 关于mac electron设备权限申请的方法
- 两种实现方式 | 如何查看消费者组的消费情况
- 一致性hash算法(golang)
- 微服务安全吗?
- 掌握Rabbitmq几个重要概念,从一条消息说起
- 超赞!墙裂推荐一个 MySQL 自动化运维工具!
- 设计模式-责任链模式
- 问题 linux下执行.sh 文件出现 no such file or directoryile
- 问题:ssm关于mybatis没有找到配置问题(not found)
- 设计模式-享元模式