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中的两个内置模块介绍
Apr 05 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
详解Python的Django框架中的templates设置
May 11 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
详解python调用cmd命令三种方法
Jul 08 Python
Python3 批量扫描端口的例子
Jul 25 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
python多进程下的生产者和消费者模型
May 07 Python
python图片合成的示例
Nov 09 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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读写文件的方法(生成HTML)
2006/11/27 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP define函数的使用说明
2008/08/27 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
php语法检查的方法总结
2019/01/21 PHP
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python正则表达式常用函数总结
2017/06/24 Python
详解django中自定义标签和过滤器
2017/07/03 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
解析Python3中的Import
2019/10/13 Python
python语言中有算法吗
2020/06/16 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Python设计密码强度校验程序
2020/07/30 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
介绍一下linux的文件系统
2012/03/20 面试题
《假如》教学反思
2014/04/17 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android