Python爬取网站上的内链和外链
2018-02-26 21:05
204 查看
#%% # -*- coding: utf-8 -* #__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 from urllib import request pages = 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).netloc internalLinks = [] #找出所有以“/”开头的链接 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 externalLinks def 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).netloc internalLinks = 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): domain = urlparse(siteUrl).scheme+"://"+urlparse(siteUrl).netloc internalLinks = getInternalLinks(bsObj,domain) externalLinks = getExternalLinks(bsObj,domain) f = open('result.txt','w') #收集外链 for link in externalLinks: if link not in allExtLinks: allExtLinks.add(link) #print(link) f.writelines(link+'\n') print("即将获取的外部链接的URL是:"+link) #收集内链 for link in internalLinks: if link not in allIntLinks: print("即将获取内部链接的URL是:"+link) allIntLinks.add(link) getAllExternalLinks(link) f.writelines(link+'\n') #followExternalOnly("http://bbs.3s001.com/forum-36-1.html") #allIntLinks.add("http://bbs.3s001.com/forum-36-1.html") getAllExternalLinks("http://www.zzu.edu.cn/")
相关文章推荐
- 为什么网站外链、内链能有效提高网站的排名与权重
- python爬虫(2.获取网页外链与内链)
- 如何主宰网站权重内链和外链的调配
- python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客
- Mac下搭建Django+XAMPP(Mysql+Apache)+Python网站开发环境
- Python oj 的网站
- python资源网站
- python3简单爬虫 (爬取各个网站上的图片)
- 学习python的几大网站
- 关于网站外链的基础定义解释
- python网络编程——读取网站根目录
- Optipng,jpegoptim应用,用python实现图片压缩,让你的网站变得更快
- 【从0开始Tornado建站】0.9版本python网站代码开源--持续更新中
- [python网站开发] 一.Django入门知识及创建第一个网站
- python爬取网站数据保存使用的方法
- python学习笔记2 学习网站博客推荐
- 用Python Scrapy爬取某电影网站并存储入mysql
- 如何评价网站外链民工?
- 网站外链的寻找和发布外链的技巧
- 在IIS上部署基于django WEB框架的python网站应用