Python爬虫小实践:获取某个网站所有的外部链接以及内部链接

news/2024/5/20 12:05:58/文章来源:https://stubbornhuang.blog.csdn.net/article/details/56009019

我们在进行爬虫时有的时候不可能只是在一个网站上进行内容上的爬取,理想中的爬虫应该是顺着一个链接从一个页面到另外一个页面,这需要获取页面上的所有的外链,同时收集每个页面上的内链。网站首页上不一定会发现外链,为了防止程序出错,就要递归深入到一个网站直到找到一个外链为止。

但在爬取的过程中出现了TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。这个错误。

可能是由于访问网站频率过快,或者是我处于校园网,访问过快,被学校的服务的给限制了,或者是网速不好。所以在网上百度了下,设置了代理IP,结果完美运行,没有出现这个原因,最新的代理IP,自行百度即可。

 

附上代码:

 

#__author__ = 'Administrat
#coding=utf-8
from urllib.request import urlopen
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import re
import datetime
import random
import io
import os
import sys
from urllib  import request
import urllibpages = set()
random.seed(datetime.datetime.now())sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}#获取页面所有内链的列表
def getInternalLinks(bsObj, includeUrl):includeUrl = urlparse(includeUrl).scheme+"://"+urlparse(includeUrl).netlocinternalLinks = []#找出所有以“/”开头的链接for link in bsObj.findAll("a", href=re.compile("^(/|.*"+includeUrl+")")):if link.attrs['href'] is not None:if link.attrs['href'] not in internalLinks:if(link.attrs['href'].startswith("/")):internalLinks.append(includeUrl+link.attrs['href'])else:internalLinks.append(link.attrs['href'])return internalLinks#获取页面所有外链的列表
def getExternalLinks(bsObj, excludeUrl):externalLinks = []#找出所有以“http”或者“www”开头且不包含当前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 externalLinksdef getRandomExternalLink(startingPage):req=request.Request(startingPage,headers=headers)html=urlopen(req)bsObj=BeautifulSoup(html.read(),"html.parser")externalLinks = getExternalLinks(bsObj, urlparse(startingPage).netloc)if len(externalLinks) == 0:print("没有外部链接,准备遍历整个网站")domain = urlparse(startingPage).scheme+"://"+urlparse(startingPage).netlocinternalLinks = getInternalLinks(bsObj, domain)return getRandomExternalLink(internalLinks[random.randint(0,len(internalLinks)-1)])else:return externalLinks[random.randint(0, len(externalLinks)-1)]def followExternalOnly(startingSite):externalLink = getRandomExternalLink(startingSite)print("随机外链是: "+externalLink)followExternalOnly(externalLink)#收集网站上发现的所有外链列表
allExtLinks = set()
allIntLinks = set()
def getAllExternalLinks(siteUrl):#设置代理IP访问proxy_handler=urllib.request.ProxyHandler({'http':'183.77.250.45:3128'})proxy_auth_handler=urllib.request.ProxyBasicAuthHandler()#proxy_auth_handler.add_password('realm', '123.123.2123.123', 'user', 'password')opener = urllib.request.build_opener(urllib.request.HTTPHandler, proxy_handler)urllib.request.install_opener(opener)req=request.Request(siteUrl,headers=headers)html=urlopen(req)bsObj=BeautifulSoup(html.read(),"html.parser")domain = urlparse(siteUrl).scheme+"://"+urlparse(siteUrl).netlocinternalLinks = getInternalLinks(bsObj,domain)externalLinks = getExternalLinks(bsObj,domain)#收集外链for link in externalLinks:if link not in allExtLinks:allExtLinks.add(link)#print(link)print("即将获取的外部链接的URL是:"+link)#收集内链for link in internalLinks:if link not in allIntLinks:print("即将获取内部链接的URL是:"+link)allIntLinks.add(link)getAllExternalLinks(link)#followExternalOnly("http://bbs.3s001.com/forum-36-1.html")
#allIntLinks.add("http://bbs.3s001.com/forum-36-1.html")
getAllExternalLinks("http://wangyou.pcgames.com.cn/zhuanti/lol/")


结果:

 

 

获取这些所有的外部链接之后,可以自行设置爬取某个页面上的什么东西,哈哈。

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_768597.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员提升码字代码速度网站

文章目录1 SpeedCoder1 SpeedCoder 官网:http://www.speedcoder.net/ 这个是专门针对于程序员的打字练习网站,支持各种编程语言的练习,包括C/C/C#/Html/Ruby/CSS/Python/Perl/JavaScript/Java/PHP 会给出一段代码释放,并且显示…

穷建站(一):申请免费的tk顶级域名

文章目录1 序2 注册免费的tk顶级域名1 序 建一个个人网站我相信是很多人从初中甚至是高中开始就想做的一件事情,起码我是这样的。 在初中的时候第一次上网,我就很好奇网站到底是怎么建起来的,我们又是如何通过互联网去访问到我们的站点并成功…

穷建站(二):在DnsPod中为申请的tk域名进行域名解析

文章目录1 序2 DnsPod域名解析2.1 DnsPod网站账号注册2.2 在DnsPod中添加需要解析的域名3 在Freenom中进行域名解析配置1 序 在上一篇博文中:穷建站(一):申请免费的tk顶级域名 博文中已经成功的申请了一个tk顶级域名,…

查看别人的网站是用的WordPress的哪个主题

文章目录1 Whatwpthemeisthat2 wpthemedetector1 Whatwpthemeisthat 网站:https://whatwpthemeisthat.com/ 2 wpthemedetector 网址:http://wpthemedetector.coderschool.cn/ 国内的检测网址,相比于第一个国内打开速度快很多!&#xff01…

无需server-U IIS7.5 在已有的多个WEB网站上配置FTP发布

1 新建一个用于ftp登陆的计算机用户。 操作:开始→管理工具→计算机管理→本地用户和组→用户,新建一个计算机用户,设置好用户名和密码,例如:nenkea nkscl2 在web站点文件夹下,把新建用户的所有权限给到。操…

网站个性化 - 添加人形时钟

文章目录1 官网地址2 添加人形时钟1 官网地址 http://chabudai.org/blog/?p59 2 添加人形时钟 &#xff08;1&#xff09;添加透明背景人形时钟的JavaScript代码为&#xff1a; <script charset"Shift_JIS" src"http://chabudai.sakura.ne.jp/blogpart…

工具网站推荐 - DLL‑FILES.COM帮你找到你的应用程序所缺失的dll文件

文章目录1 DLL‑FILES.COM2 使用1 DLL‑FILES.COM 官网&#xff1a;https://cn.dll-files.com/ 2 使用 在搜索框中搜索你所缺失的dll文件名&#xff0c;如果该网站有相关的dll&#xff0c;那么就会在下方弹出可供下载的dll;下载dll将dll复制到C:\Windows\System32或者C:\Win…

工具网站推荐 - 欧拉角四元数在线可视化转化网站/三维在线旋转变换网站

文章目录1 欧拉角四元数在线可视化转换网站1.1 静态变换2 三维在线旋转变换网站2.1 使用3 Rotation Conversion Tool1 欧拉角四元数在线可视化转换网站 网站地址&#xff1a;https://quaternions.online/ 1.1 静态变换 例如绕X轴旋转90度的四元数为&#xff1a; 在下方X处输…

动漫网站基于jquery的横向手风琴特效

今天给大家分享一款动漫网站基于jquery的横向手风琴特效。这款手风琴特效适用浏览器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div class"box2&q…

动态网站开发技术学习1:走进ASP.NET

打开微软官网搜索ASP.NET&#xff0c;首先进入我们视线的就是ASP.NET的介绍&#xff0c;翻译一下&#xff1a;ASP.NET是一个免费的 Web框架构建Web站点&#xff0c;应用程序和服务与HTML&#xff0c;CSS和JavaScript。 ASP.NET是.NET FrameWork的一部分&#xff0c;是一项微软…

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤&#xff1a; 一&#xff0c;启动VS 2010开发环境&#xff0c;选择菜单中的“文件”&#xff0c;选择其中的“新建”&#xff0c;再选择“网站”&#xff0c;会弹出”新建网站“对话框。 二&#xff0c;在“新建网站”的对话框&#xff0c;在“已安装…

动态网站开发技术学习3:ASP.NET内置对象之Response对象

Response对象是HttpRespone类的一个实例。该类主要是封装来自ASP.NET操作的HTTP相应信息。Response 对象将数据作为请求的结果从服务器发送到客户浏览器中&#xff0c;并提供有关响应的消息。它可用来在页面中输出数据&#xff0c;在 页面中跳转&#xff0c;还可以传递各个页…

动态网站开发技术学习4:ASP.NET内置对象之Request对象

Request对象的作用是与客户端交互&#xff0c;收集客户端的Form、Cookies、超链接&#xff0c;或者收集服务器端的环境变量。 request对象是从客户端向服务器发出请求&#xff0c;包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或 在网页地址后面提供参数的方…

网站注册如何让防止被恶意刷....

最近公司平台推出填写推荐人送10券,然后被些恶意分子刷了. 注册时只有短信验证~现在加了点击生成验证码,感觉还是防不住~ 被这样的软件恶意刷了~很是可恶,有没有大神推荐个防刷机制. 一开始短信的话,他们是利用多线程凑短信验证码,现在加了次数,加了页面验证码.理论上经过2道验…

浅谈web网站架构演变过程

前言 我们以javaweb为例&#xff0c;来搭建一个简单的电商系统&#xff0c;看看这个系统可以如何一步步演变。该系统具备的功能&#xff1a;用户模块&#xff1a;用户注册和管理商品模块&#xff1a;商品展示和管理交易模块&#xff1a;创建交易和管理 阶段一、单机构建网站 网…

用python爬取网站数据xlwt、bs4_python requests+beautifulsoup4爬取全国医院信息

import requests,re,xlwt,datetimefrom bs4 import BeautifulSoup#初始化def init():global url, headersurl https://www.zgylbx.com/index.php?mcontent&cindex&alists&catid106&pageheaders {"Accept": "text/html,application/xhtmlxml,…

转:移动建站工具(一):分秒钟将Web网站移动化

作者唐小引移动建站工具Web移动化简易开发MobifyTOPMobile Joomla!MoFuseWordPress优化摘要&#xff1a;时下移动端显然已是诸多企业都想要占领的重要阵地。但限于较小的屏幕及流量问题&#xff0c;移动设备并不适合直接浏览Web网站。本文介绍了13款Web-to-Mobile建站工具&…

[转] 国内某基于ASP.NET的大型网站的架构设计图

转载于:https://www.cnblogs.com/maizhongfei/p/4154463.html

Hero Patterns - 聚合各种 SVG 背景纹理素材的网站

Hero Patterns 是一个聚合了各种 SVG 背景纹理素材的网站&#xff0c;提供的多样的素材可以给你的网站带去特色。 SVG 是一种分辨率无关的图形&#xff08;矢量图形&#xff09;。这意味着它在任何类型的屏幕都不会遭受任何质量损失。 立即去看看 您可能感兴趣的相关文章网站开…

javascript网站背景音乐

∶∶网站背景音乐∶∶ [怎么添加背景音乐]&#xff1a;将这段代码插入到您的<首页布告>内容中&#xff0c;当您打开网站时即可听到背景音乐&#xff1a; <bgsound src/textbook/matter/music/china.mid loop"-1">[怎么换成自己喜欢的音乐]&#xff1a;请…