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的id()函数介绍
Feb 10 Python
Python Deque 模块使用详解
Jul 04 Python
用Python编写简单的定时器的方法
May 02 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
浅谈Python 集合(set)类型的操作——并交差
Jun 30 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
OpenCV图像颜色反转算法详解
May 13 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
Python基于百度AI实现OCR文字识别
Apr 02 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
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
python+opencv实现动态物体识别
2018/01/09 Python
使用django实现一个代码发布系统
2019/07/18 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
python之随机数函数的实现示例
2020/12/30 Python
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
几道PHP的面试题
2012/05/19 面试题
在什么时候需要使用"常引用"
2015/12/31 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
自荐信需注意事项
2014/01/25 职场文书
医院义诊活动总结
2014/07/04 职场文书
公务员年度考核评语
2014/12/31 职场文书
财务经理岗位职责
2015/01/31 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python