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里disconnect UDP套接字的方法
Apr 23 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
python实现图片压缩代码实例
Aug 12 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python图片的横坐标汉字实例
Dec 04 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
python中pandas对多列进行分组统计的实现
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
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php上传文件问题汇总
2015/01/30 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
美国温暖商店:The Warming Store
2018/12/15 全球购物
日语系毕业生推荐信
2013/11/11 职场文书
技能竞赛活动方案
2014/02/21 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
车间统计员岗位职责
2015/04/14 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
2021年最新用于图像处理的Python库总结
2021/06/15 Python
使用python创建股票的时间序列可视化分析
2022/03/03 Python