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 中if else 语句的作用及示例代码
Mar 05 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python实现贪吃蛇小游戏
Mar 21 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
利用Python复制文件的9种方法总结
Sep 02 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
Keras实现将两个模型连接到一起
May 23 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
python 实现简易的记事本
Nov 30 Python
selenium+headless chrome爬虫的实现示例
Jan 08 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
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
土木工程毕业生推荐信
2013/10/28 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
经销商年会策划方案
2014/05/29 职场文书
调研汇报材料范文
2014/08/17 职场文书
大学团日活动总结书
2015/05/11 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL
Oracle中update和select 关联操作
2022/01/18 Oracle
Python中with上下文管理协议的作用及用法
2022/03/18 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫