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之从格式化表达式到方法
Sep 28 Python
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
Python中的with...as用法介绍
May 28 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
python实现的读取网页并分词功能示例
Oct 29 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
Python实现点云投影到平面显示
Jan 18 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
一文详述 Python 中的 property 语法
Sep 01 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
在Python的Django框架中加载模版的方法
2015/07/16 Python
Python实现多线程抓取妹子图
2015/08/08 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
2014全国两会学习心得体会1000字
2014/03/10 职场文书
员工生日会策划方案
2014/06/14 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
就业意向协议书
2015/01/29 职场文书
立案决定书范文
2015/06/24 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
python异常中else的实例用法
2021/06/15 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript