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中的字典详细介绍
Sep 18 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
Python中包的用法及安装
Feb 11 Python
python3注册全局热键的实现
Mar 22 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Python安装Bs4的多种方法
Nov 28 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
python中添加模块导入路径的方法
Feb 03 Python
Python爬虫制作翻译程序的示例代码
Feb 22 Python
Python pandas之求和运算和非空值个数统计
Aug 07 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 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python中datetime常用时间处理方法
2015/06/15 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
了解一下python内建模块collections
2020/09/07 Python
python 实现逻辑回归
2020/12/30 Python
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
促销活动总结模板
2014/07/01 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
优秀教师申报材料
2014/12/16 职场文书
党支部意见范文
2015/06/02 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL