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使用Flask框架同时上传多个文件的方法
Mar 21 Python
Python中property属性实例解析
Feb 10 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
python变量命名的7条建议
Jul 04 Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Django+Celery实现动态配置定时任务的方法示例
May 26 Python
python中upper是做什么用的
Jul 20 Python
如何用 Python 处理不平衡数据集
Jan 04 Python
详解在OpenCV中如何使用图像像素
Mar 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观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
两个Javascript小tip资料
2010/11/23 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
了解javascript中的Dom操作
2019/05/27 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Python转换时间的图文方法
2019/07/01 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
通过cmd进入python的步骤
2020/06/16 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
房产代理公证处委托书
2014/04/04 职场文书
公司承诺书怎么写
2014/05/24 职场文书
询价采购方案
2014/06/09 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
八达岭长城导游词
2015/01/30 职场文书
英文商务邀请函范文
2015/01/31 职场文书
大学生个人总结范文
2015/02/15 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
PHP解决高并发问题
2021/04/01 PHP
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang