Python爬虫获取整个站点中的所有外部链接代码示例

 更新时间:2017年12月26日 10:29:32   作者:土肥圆的猿  
这篇文章主要介绍了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://www.jb51.net/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://www.jb51.net/article/130968.htm")

爬取结果如下:

总结

以上就是本文关于Python爬虫获取整个站点中的所有外部链接代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • 解读Python脚本的常见参数获取和处理方式

    解读Python脚本的常见参数获取和处理方式

    这篇文章主要介绍了Python脚本的常见参数获取和处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Python中enumerate()函数编写更Pythonic的循环

    Python中enumerate()函数编写更Pythonic的循环

    本篇文章主要大家通过实例讲述了Python中enumerate()函数编写更Pythonic的循环的知识点,有兴趣的朋友参考学习下。
    2018-03-03
  • Django框架配置mysql数据库实现过程

    Django框架配置mysql数据库实现过程

    这篇文章主要介绍了Django框架配置mysql数据库实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • jupyternotebook 撤销删除的操作方式

    jupyternotebook 撤销删除的操作方式

    这篇文章主要介绍了jupyternotebook 撤销删除的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python的Scrapy框架基本使用详解

    Python的Scrapy框架基本使用详解

    这篇文章主要介绍了Python的Scrapy框架基本使用详解,Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试,需要的朋友可以参考下
    2023-12-12
  • 利用Python+Excel制作一个视频下载器

    利用Python+Excel制作一个视频下载器

    说起Excel,那绝对是数据处理领域王者般的存在。而作为网红语言Python,在数据领域也是被广泛使用。本文将利用Python和Excel制作一个视频下载器,需要的可以参考一下
    2022-05-05
  • Python 列表映射后的平均值

    Python 列表映射后的平均值

    这篇文章主要介绍了Python 列表映射后的平均值,下面文章将围绕Python 列表映射后的平均值得相关资料展开详细内容,需要的朋友可以参考一下
    2021-11-11
  • 详解Python垃圾回收机制和常量池的验证

    详解Python垃圾回收机制和常量池的验证

    这篇文章主要介绍了详解Python垃圾回收机制和常量池的验证,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python解析照片拍摄时间进行图片整理

    python解析照片拍摄时间进行图片整理

    这篇文章主要为大家介绍了python解析照片拍摄时间进行图片整理的示例源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Python 异常处理的实例详解

    Python 异常处理的实例详解

    这篇文章主要介绍了Python 异常处理的实例详解的相关资料,希望通过本文能帮助到大家掌握Python 异常的知识,需要的朋友可以参考下
    2017-09-09

最新评论