Python获取当前页面内所有链接的四种方法对比分析
本文实例讲述了Python获取当前页面内所有链接的四种方法。分享给大家供大家参考,具体如下:
'''
得到当前页面所有连接
'''
importrequests
importre
frombs4importBeautifulSoup
fromlxmlimportetree
fromseleniumimportwebdriver
url='http://www.testweb.com'
r=requests.get(url)
r.encoding='gb2312'
#利用re(太黄太暴力!)
matchs=re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')",r.text)
forlinkinmatchs:
print(link)
print()
#利用BeautifulSoup4(DOM树)
soup=BeautifulSoup(r.text,'lxml')
forainsoup.find_all('a'):
link=a['href']
print(link)
print()
#利用lxml.etree(XPath)
tree=etree.HTML(r.text)
forlinkintree.xpath("//@href"):
print(link)
print()
#利用selenium(要开浏览器!)
driver=webdriver.Firefox()
driver.get(url)
forlinkindriver.find_elements_by_tag_name("a"):
print(link.get_attribute("href"))
driver.close()
注意:若页面中含有iframe,则iframe内所包含页面的所有标签都无法用以上四种方法获得!!!此时则要:
#再打开所有iframe查找全部的a标签
foriframeinsoup.find_all('iframe'):
url_ifr=iframe['src']#取得当前iframe的src属性值
rr=requests.get(url_ifr)
rr.encoding='gb2312'
soup_ifr=BeautifulSoup(rr.text,'lxml')
forainsoup_ifr.find_all('a'):
link=a['href']
m=re.match(r'http:\/\/.*?(?=\/)',link)
#print(link)
ifm:
all_urls.add(m.group(0))
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。