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中的struct模块
Apr 28 Python
解读Django框架中的低层次缓存API
Jul 24 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
python基础教程项目二之画幅好画
Apr 02 Python
python实现画一颗树和一片森林
Jun 25 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
django实现支付宝支付实例讲解
Oct 17 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
node.js超时timeout详解
2014/11/26 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Python之指数与E记法的区别详解
2019/11/21 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
英语教学随笔感言
2014/02/20 职场文书
内勤主管岗位职责
2014/04/03 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
紧急通知
2015/04/17 职场文书
Django migrate报错的解决方案
2021/05/20 Python
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python