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编写基于DHT协议的BT资源爬虫
Mar 19 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
Django与pyecharts结合的实例代码
May 13 Python
Python新手学习raise用法
Jun 03 Python
学python爬虫能做什么
Jul 29 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
详解Python牛顿插值法
May 11 Python
Python OpenCV形态学运算示例详解
Apr 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制作的意见反馈表源码
2007/03/11 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python爬虫超时的处理的实例
2018/12/19 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
作文批改评语大全
2014/04/23 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
庆元旦演讲稿
2014/09/15 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
小学生手册家长意见
2015/06/03 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
Node与Python 双向通信的实现代码
2021/07/16 Javascript