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中的lambda表达式的用法
Aug 28 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
基于Python os模块常用命令介绍
Nov 03 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
python join方法使用详解
Jul 30 Python
opencv python如何实现图像二值化
Feb 03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
Smarty中的注释和截断功能介绍
2015/04/09 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
jqgrid 简单学习笔记
2011/05/03 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
Python selenium如何设置等待时间
2016/09/15 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
酒店员工检讨书
2014/02/18 职场文书
社区居务公开实施方案
2014/03/27 职场文书
2014年学生工作总结
2014/11/20 职场文书
2014年销售部工作总结
2014/12/01 职场文书
医德医风学习心得体会
2016/01/25 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python