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的一些用法分享
Oct 07 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python删除过期log文件操作实例解析
Jan 31 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python实现事件驱动
Nov 21 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
python中property和setter装饰器用法
Dec 19 Python
Python+Xlwings 删除Excel的行和列
Dec 19 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处理整数函数的详解
2013/06/09 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
Python随机生成身份证号码及校验功能
2018/12/04 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
python开发入门——列表生成式
2020/09/03 Python
Java工程师面试集锦之Spring框架
2013/06/16 面试题
大课间活动制度
2014/01/18 职场文书
社区清明节活动总结
2014/07/04 职场文书
责任书格式
2015/01/29 职场文书
步步惊心观后感
2015/06/12 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android