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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python实现flappy bird小游戏
Dec 24 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
解决Django加载静态资源失败的问题
Jul 28 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
Django异步任务线程池实现原理
Dec 17 Python
如何定义TensorFlow输入节点
Jan 23 Python
python如何实现图片压缩
Sep 11 Python
Python基于Faker假数据构造库
Nov 30 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大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
php读取csc文件并输出
2015/05/21 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Python模块的制作方法实例分析
2019/12/21 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Python版中国省市经纬度
2020/02/11 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
GWT都有什么特性
2016/12/02 面试题
巧克力蛋糕店创业计划书
2014/01/14 职场文书
单位创先争优活动方案
2014/01/26 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
同学聚会邀请函
2015/01/30 职场文书
加薪申请报告范本
2015/05/15 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL