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简单实现enum功能的方法
Apr 25 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
python处理RSTP视频流过程解析
Jan 11 Python
解决python 找不到module的问题
Feb 12 Python
Pytorch转onnx、torchscript方式
May 25 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 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的PHP XML类
2006/10/09 PHP
在PHP中使用灵巧的体系结构
2006/10/09 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP中header用法小结
2016/05/23 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
js改变embed标签src值的方法
2015/04/10 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
node内置调试方法总结
2018/02/22 Javascript
vue实现文件上传功能
2018/08/13 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
python实现合并两个数组的方法
2015/05/16 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
精选奢华:THE LIST
2019/09/05 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
暑期社会实践学生的自我评价
2014/01/09 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
颁奖晚会主持词
2014/03/25 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
兴趣班停课通知
2015/04/24 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书