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 crontab设置linux定时任务
Dec 08 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
python简单验证码识别的实现方法
May 10 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
微信公众号token验证失败解决方案
Jul 22 Python
Python with标签使用方法解析
Jan 17 Python
python实现的Iou与Giou代码
Jan 18 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
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
各种咖啡的英文名子是什么
2021/03/03 新手入门
php生成唯一的订单函数分享
2015/02/02 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
大学毕业的自我鉴定
2013/10/08 职场文书
客户经理岗位职责
2013/12/08 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
大学生自我评价范文
2015/03/03 职场文书
专项资金申请报告
2015/05/15 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
同学会演讲稿
2019/04/02 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python