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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
详解python pandas 分组统计的方法
Jul 30 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
学python最电脑配置有要求么
Jul 05 Python
python各种excel写入方式的速度对比
Nov 10 Python
Python运算符+与+=的方法实例
Feb 18 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 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
mysql 全文搜索 技巧
2007/04/27 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
解决Python传递中文参数的问题
2015/08/04 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
任命书格式
2014/06/05 职场文书
药剂专业求职信
2014/06/20 职场文书
违章停车检讨书
2014/10/21 职场文书
入党函调证明材料
2014/12/24 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
MySQL新手入门进阶语句汇总
2022/09/23 MySQL