Python爬虫获取整个站点中的所有外部链接代码示例


Posted in Python onDecember 26, 2017

收集所有外部链接的网站爬虫程序流程图

Python爬虫获取整个站点中的所有外部链接代码示例

下例是爬取本站python绘制条形图方法代码详解的实例,大家可以参考下。

完整代码:

#! /usr/bin/env python
#coding=utf-8

import urllib2
from  bs4 import BeautifulSoup
import re
import datetime
import random

pages=set()
random.seed(datetime.datetime.now())
#Retrieves a list of all Internal links found on a page
def getInternalLinks(bsObj, includeUrl):
        internalLinks  =  []
        #Finds all links  that  begin  with  a  "/"
        for link  in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")):
                if link.attrs['href'] is not None:
                        if link.attrs['href'] not in internalLinks:
                                internalLinks.append(link.attrs['href'])
        return internalLinks
#Retrieves a list of all external links found on a page
def getExternalLinks(bsObj, excludeUrl):
        externalLinks  =  []
        #Finds all links  that  start  with  "http" or "www"  that  do
        #not  contain the current URL
        for link  in bsObj.findAll("a", 
                              href=re.compile("^(http|www)((?!"+excludeUrl+").)*$")):
                if link.attrs['href'] is not None:
                        if link.attrs['href'] not in externalLinks:
                                externalLinks.append(link.attrs['href'])
        return externalLinks

def splitAddress(address):
        addressParts  =  address.replace("http://", "").split("/")
        return addressParts

def getRandomExternalLink(startingPage):
        html=  urllib2.urlopen(startingPage)
        bsObj  =  BeautifulSoup(html)
        externalLinks  =  getExternalLinks(bsObj, splitAddress(startingPage)[0])
        if len(externalLinks) == 0:
                internalLinks  =  getInternalLinks(startingPage)
                return internalLinks[random.randint(0, len(internalLinks)-1)]
        else:
                return externalLinks[random.randint(0, len(externalLinks)-1)]

def followExternalOnly(startingSite):
        externalLink=getRandomExternalLink("https://3water.com/article/130968.htm")
        print("Random  external  link  is: "+externalLink)
        followExternalOnly(externalLink)

#Collects a list of all external URLs found on the site
allExtLinks=set()
allIntLinks=set()
def getAllExternalLinks(siteUrl):
    html=urllib2.urlopen(siteUrl)
    bsObj=BeautifulSoup(html)
    internalLinks  =  getInternalLinks(bsObj,splitAddress(siteUrl)[0])
    externalLinks  =  getExternalLinks(bsObj,splitAddress(siteUrl)[0])
    for link in externalLinks:
      if link not in allExtLinks:
        allExtLinks.add(link)
        print(link)
    for link in internalLinks:
      if link not in allIntLinks:
        print("About to get link:"+link)
        allIntLinks.add(link)
        getAllExternalLinks(link)

getAllExternalLinks("https://3water.com/article/130968.htm")

爬取结果如下:

Python爬虫获取整个站点中的所有外部链接代码示例

总结

以上就是本文关于Python爬虫获取整个站点中的所有外部链接代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
用Pygal绘制直方图代码示例
Dec 07 Python
python2.7实现爬虫网页数据
May 25 Python
Python走楼梯问题解决方法示例
Jul 25 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python写程序统计词频的方法
Jul 29 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
python中time库的实例使用方法
Oct 31 Python
python实现mean-shift聚类算法
Jun 10 Python
Python之web模板应用
Dec 26 #Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 #Python
如何在python中使用selenium的示例
Dec 26 #Python
Python使用Matplotlib实现Logos设计代码
Dec 25 #Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 #Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 #Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 #Python
You might like
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
PHP print类函数使用总结
2010/06/25 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
AngularJS入门之动画
2016/07/27 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
详解Python with/as使用说明
2018/12/13 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
办公室主任岗位职责
2013/11/08 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书