Python获取当前页面内所有链接的四种方法对比分析


Posted in Python onAugust 19, 2017

本文实例讲述了Python获取当前页面内所有链接的四种方法。分享给大家供大家参考,具体如下:

'''
得到当前页面所有连接
'''
import requests
import re
from bs4 import BeautifulSoup
from lxml import etree
from selenium import webdriver
url = 'http://www.testweb.com'
r = requests.get(url)
r.encoding = 'gb2312'
# 利用 re (太黄太暴力!)
matchs = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')" , r.text)
for link in matchs:
  print(link)
print()
# 利用 BeautifulSoup4 (DOM树)
soup = BeautifulSoup(r.text,'lxml')
for a in soup.find_all('a'):
  link = a['href']
  print(link)
print()
# 利用 lxml.etree (XPath)
tree = etree.HTML(r.text)
for link in tree.xpath("//@href"):
  print(link)
print()
# 利用selenium(要开浏览器!)
driver = webdriver.Firefox()
driver.get(url)
for link in driver.find_elements_by_tag_name("a"):
  print(link.get_attribute("href"))
driver.close()

注意:若页面中含有 iframe,则 iframe 内所包含页面的所有标签都无法用以上四种方法获得!!!此时则要:

# 再打开所有iframe查找全部的a标签
for iframe in soup.find_all('iframe'):
  url_ifr = iframe['src'] # 取得当前iframe的src属性值 
  rr = requests.get(url_ifr)
  rr.encoding = 'gb2312'
  soup_ifr = BeautifulSoup(rr.text,'lxml')
  for a in soup_ifr.find_all('a'):
    link = a['href']
    m = re.match(r'http:\/\/.*?(?=\/)',link)
    #print(link)
    if m:
      all_urls.add(m.group(0))
Python 相关文章推荐
python简单程序读取串口信息的方法
Mar 13 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python最小二乘法矩阵
Jan 02 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
python datetime时间格式的相互转换问题
Jun 11 Python
Python filter过滤器原理及实例应用
Aug 18 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 #Python
Python正则捕获操作示例
Aug 19 #Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 #Python
在java中如何定义一个抽象属性示例详解
Aug 18 #Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 #Python
python中子类调用父类函数的方法示例
Aug 18 #Python
Python设计实现的计算器功能完整实例
Aug 18 #Python
You might like
资料注册后发信小技巧
2006/10/09 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python查找相似单词的方法
2015/03/05 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
详解flask入门模板引擎
2018/07/18 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
python圣诞树编写实例详解
2020/02/13 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
小学生考试获奖感言
2014/01/30 职场文书
公司节能减排倡议书
2014/05/14 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers