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中的字符串类型基本知识学习教程
Feb 04 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
python自定义异常实例详解
Jul 11 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
python opencv实现运动检测
Jul 10 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
计数器详细设计
2006/10/09 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
PHP静态成员变量
2017/02/14 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
shiro授权的实现原理
2017/09/21 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
node.js express框架简介与实现
2019/07/23 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
深入解析Python中的WSGI接口
2015/05/11 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python 19个值得学习的编程技巧
2020/08/15 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
自我评价是什么
2014/01/04 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
golang语言指针操作
2022/04/14 Golang
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript