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字符串连接方法分析
Apr 12 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
一些关于python 装饰器的个人理解
Aug 31 Python
Python 里最强的地图绘制神器
Mar 01 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
第十四节--命名空间
2006/11/16 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JavaScript函数详解
2015/02/27 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
python条件和循环的使用方法
2013/11/01 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
在python中实现对list求和及求积
2018/11/14 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python实现简单猜数字游戏
2021/02/03 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
端午节活动策划方案
2014/03/09 职场文书
求职个人评价范文
2014/04/09 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
个人简历求职信范文
2015/03/20 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
小王子读书笔记
2015/06/29 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android