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-基础-入门 简介
Aug 09 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python简单获取自身外网IP的方法
Sep 18 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
Python发送http请求解析返回json的实例
Mar 26 Python
python实现梯度下降算法
Mar 24 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
原生python实现knn分类算法
Oct 24 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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实现的获取URL信息的类
2007/01/02 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
Python实现数据库编程方法详解
2015/06/09 Python
Python 中 Meta Classes详解
2016/02/13 Python
Python单元测试简单示例
2018/07/03 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
毕业自荐信
2013/12/16 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
测量员岗位职责
2015/02/14 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技