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实现从百度API获取天气的方法
Mar 11 Python
Python中返回字典键的值的values()方法使用
May 22 Python
Sanic框架流式传输操作示例
Jul 18 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
Python3实现的反转单链表算法示例
Mar 08 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python根据服务获取端口号的方法
Sep 25 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Django drf请求模块源码解析
Jun 08 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+DBM的同学录程序(5)
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
chrome原生方法之数组
2011/11/30 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
python regex库实例用法总结
2021/01/03 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
电大自我鉴定范文
2013/10/01 职场文书
参观监狱心得体会
2014/01/02 职场文书
网站创业计划书
2014/04/30 职场文书
解除财产保全担保书
2014/05/20 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
六查六看心得体会
2014/10/14 职场文书
担保书格式范文
2015/09/22 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书