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之玩转字符串(2)
Sep 14 Python
python自动zip压缩目录的方法
Jun 28 Python
Python 实现随机数详解及实例代码
Apr 15 Python
python 统计代码行数简单实例
May 04 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
详解python深浅拷贝区别
Jun 24 Python
python Django的web开发实例(入门)
Jul 31 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
详解Python time库的使用
Oct 10 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 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
dedecms模版制作使用方法
2007/04/03 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
jQuery 名称冲突的解决方法
2011/04/08 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
python3 读取Excel表格中的数据
2018/10/16 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
关于环保的活动方案
2014/08/25 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers