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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
Python中元组,列表,字典的区别
May 21 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
python实现微信自动回复功能
Apr 11 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python机器学习之KNN分类算法
Aug 29 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
Python 如何展开嵌套的序列
Aug 01 Python
Python关于拓扑排序知识点讲解
Jan 04 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可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python添加菜单图文讲解
2019/06/04 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
python实现按行分割文件
2019/07/22 Python
django框架cookie和session用法实例详解
2019/12/10 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python 代码调试技巧示例代码
2020/08/11 Python
python 19个值得学习的编程技巧
2020/08/15 Python
详解Django中异步任务之django-celery
2020/11/05 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
企业门卫岗位职责
2013/12/12 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
党员检讨书
2014/10/13 职场文书
2014年残联工作总结
2014/11/21 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书