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 相关文章推荐
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
TensorFlow实现创建分类器
Feb 06 Python
Python json模块dumps、loads操作示例
Sep 06 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
Python变量访问权限控制详解
Jun 29 Python
django框架中间件原理与用法详解
Dec 10 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
使用Python开发冰球小游戏
Apr 30 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
用PHP调用Oracle存储过程
2006/10/09 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php浏览历史记录的方法
2015/03/10 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
分析python动态规划的递归、非递归实现
2018/03/04 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python模块future用法原理详解
2020/01/20 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
总经理助理的八要求
2013/11/12 职场文书
运动会800米加油稿
2014/02/22 职场文书
一句话工作感言
2014/03/01 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
自我推荐信怎么写
2015/03/24 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
办公室管理规章制度
2015/08/04 职场文书
python 命令行传参方法总结
2021/05/25 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python