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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python k-近邻算法实例分享
Jun 11 Python
在Python中使用正则表达式的方法
Aug 13 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
详解python实现交叉验证法与留出法
Jul 11 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
python中封包建立过程实例
Feb 18 Python
Python中22个万用公式的小结
Jul 21 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 memcache扩展的三种安装方法
2009/04/26 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
python如何查看系统网络流量的信息
2016/09/12 Python
python入门教程之识别验证码
2017/03/04 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python os模块常用方法和属性总结
2020/02/20 Python
班班通校本培训方案
2014/03/12 职场文书
股份转让协议书
2014/04/12 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
个人向公司借款协议书
2016/03/19 职场文书