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程序设计有所帮助。