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 07 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
解决Python一行输出不显示的问题
Dec 03 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 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
神族 PROTOSS 概述
2020/03/14 星际争霸
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python魔法方法-属性访问控制详解
2016/07/25 Python
Python算法之图的遍历
2017/11/16 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python发展简史 Python来历
2019/05/14 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
类和结构的区别
2012/08/15 面试题
甜美蛋糕店创业计划书
2014/01/30 职场文书
教学评估实施方案
2014/03/16 职场文书
土木工程求职信
2014/05/29 职场文书
奶茶店创业计划书
2014/08/14 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书