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 Tkinter基础控件用法
Sep 03 Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python中常用的8种字符串操作方法
May 06 Python
python argparser的具体使用
Nov 10 Python
Python中url标签使用知识点总结
Jan 16 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 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全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
js日历功能对象
2012/01/12 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
Python的print用法示例
2014/02/11 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Django使用rest_framework写出API
2020/05/21 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
信息管理专业推荐信
2013/10/29 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
承诺书样本
2014/08/30 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2014年学生工作总结
2014/11/20 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
展览会邀请函
2015/02/02 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
家属联谊会致辞
2015/07/31 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫