python爬取整个网站_python爬取网站全部url链接
御剑自带了字典,主要是分析字典中的网址是否存在,但是可能会漏掉一些关键的网址,于是前几天用python写了一个爬取网站全部链接的爬虫。
实现方法
主要的实现方法是循环,具体步骤看下图:
贴上代码:
# author: saucer_man
# date:2018-04-24
# python3.6
import re
import requests
# 获取并检验要爬取的网站
def url_get():
url=input("please input the url:")
try:
kv={'user_agent':'Mozilla/5.0'}
requests.get(url,headers=kv)
return url
except:
print("your url is incorrect!!")
return url_get()
'''
找出url中的域名
比如从https://www.xiaogeng.top/article/page/id=3筛选出www.xiaogeng.top
'''
def url_same(url):
#判断输入的网站使用的是https还是http
urlprotocol=re.findall(r'.*(?=://)',url)[0]
print('该站使用的协议是:' + urlprotocol)
if len(re.findall(r'/',url)) >2:
if urlprotocol=='https':
sameurl = re.findall(r'(?<=https://).*?(?=/)', url)[0]
else:
sameurl = re.findall(r'(?<=http://).*?(?=/)', url)[0]
else:
url = url + '/'
if urlprotocol=='https':
sameurl = re.findall(r'(?<=https://).*?(?=/)',url)[0]
else:
sameurl = re.findall(r'(?<=http://).*?(?=/)',url)[0]
print('域名地址:' + sameurl)
return sameurl
# 爬取url页面中的所有链接
def spiderpage(url):
kv={'user_agent':'Mozilla/5.0'}
r=requests.get(url,headers=kv)
r.encoding=r.apparent_encoding
pagetext=r.text
pagelinks = re.findall(r'(?<=href=").*?(?=")|(?<=href=').*?(?=')',pagetext)
return pagelinks
#筛选pagelinks中的url
def url_filtrate(pagelinks):
'''
print("我现在在筛选")
'''
#去除不是该站点的url
same_target_url = []
for l in pagelinks:
if re.findall(sameurl,l):
same_target_url.append(l)
#去除重复url
unrepect_url = []
for l in same_target_url:
if l not in unrepect_url:
unrepect_url.append(l)
return unrepect_url
#将一个列表写入文件
def writetofile(list):
file=open('urls.txt','w')
for url in list:
file.write(url)
file.write('n')
file.close()
# url集合,循环遍历会用到
class linkQuence:
def __init__(self):
#已访问的url集合
self.visited=[]
#待访问的url集合
self.unvisited=[]
#获取访问过的url队列
def getvisitedurl(self):
return self.visited
#获取未访问的url队列
def getunvisitedurl(self):
return self.unvisited
#添加url到访问过得队列中
def addvisitedurl(self,url):
return self.visited.append(url)
#移除访问过得url
def removevisitedurl(self,url):
return self.visited.remove(url)
#从未访问队列中取一个url
def unvisitedurldequence(self):
try:
return self.unvisited.pop()
except:
return None
#添加url到未访问的队列中
def addunvisitedurl(self,url):
if url!="" and url not in self.visited and url not in self.unvisited:
return self.unvisited.insert(0,url)
#获得已访问的url数目
def getvisitedurlount(self):
return len(self.visited)
#获得未访问的url数目
def getunvistedurlcount(self):
return len(self.unvisited)
#判断未访问的url队列是否为空
def unvisitedurlsempty(self):
return len(self.unvisited)==0
# 真正的爬取函数
class Spider():
def __init__(self,url):
self.linkQuence = linkQuence() #引入linkQuence类
self.linkQuence.addunvisitedurl(url) #并将需要爬取的url添加进linkQuence对列中
def crawler(self):
while not self.linkQuence.unvisitedurlsempty():# 若未访问队列非空
print("嘀嘀嘀我又爬到一个")
visitedurl = self.linkQuence.unvisitedurldequence()# 取一个url
if visitedurl is None or visitedurl == '':
continue
initial_links=spiderpage(visitedurl) # 爬出该url页面中所有的链接
right_links = url_filtrate(initial_links) # 筛选出合格的链接
self.linkQuence.addvisitedurl(visitedurl) # 将该url放到访问过的url队列中
for link in right_links: # 将筛选出的链接放到未访问队列中
self.linkQuence.addunvisitedurl(link)
# print(self.linkQuence.visited)
print("哥我爬完了")
return self.linkQuence.visited
if __name__ == '__main__':
url=url_get()
sameurl=url_same(url)
spider=Spider(url)
urllist=spider.crawler()
writetofile(urllist)
python爬取整个网站_python爬取网站全部url链接相关推荐
- python爬取房源数据_python爬取安居客二手房网站数据(实例讲解)
是小打小闹 哈哈,现在开始正式进行爬虫书写首先,需要分析一下要爬取的网站的结构:作为一名河南的学生,那就看看郑州的二手房信息吧! 在上面这个页面中,我们可以看到一条条的房源信息,从中我们发现了什么,发 ...
- python爬取小说网站_Python爬取小说网站下载小说
1前言 这个小程序是用来爬取小说网站的小说的,一般的盗版小说网站都是很好爬取的 因为这种网站基本没有反爬虫机制的,所以可以直接爬取 该小程序以该网站http://www.126shu.com/15/下 ...
- python爬虫淘宝评论_Python爬取淘宝店铺和评论
1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...
- python爬取网页新闻_Python爬取新闻网数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 基本开发环境 Pyth ...
- python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?
开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...
- python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...
- python爬取手机微信_Python爬取微信好友
前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 itchat安装 对微信的控制可以使用itchat来实现,我们找到itc ...
- python爬取酒店信息_Python 爬取美團酒店信息
事由:近期和朋友聊天,聊到黃山酒店事情,需要了解一下黃山的酒店情況,然后就想着用python 爬一些數據出來,做個參考 主要思路:通過查找,基本思路清晰,目標明確,僅僅爬取美團莫一地區的酒店信息,不過 ...
- python爬取学校新闻_Python抓取学院新闻报告
们发现,我们能够直接在新闻详情页面抓取到我们需要的数据:标题,时间,内容.URL. 好,到现在我们清楚抓取一篇新闻的思路了.但是,如何抓取所有的新闻内容呢? 这显然难不到我们. 我们在新闻栏目的最下方 ...
最新文章
- 报名 | 清华大数据论坛之深度学习技术与应用
- 【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
- NTFS磁盘的安全与管理
- Pandas0.25来了,别错过这10大好用的新功能
- Docker搭建NSQ实时分布式消息集群
- 2018CCF-CSP 5.二次求和(点分治)
- 作业要求 20181023-3 每周例行报告
- jquery修改样式通过css方法
- VINS(三)IMU预积分
- 图论算法——Prim算法和Kruskal算法
- 企业宣传片解说词的写法指导。
- 虚拟专用网和IPv6路由配置【Cisco】
- 西电和杭电计算机考研,名师张雪峰:中国有四个电子科技大学,有一个很特别,考研要注意...
- linux下的pstack和gstack命令
- 《C Primer Plus》第5章复习题与编程练习
- 爱码哥移动开发平台|让制作app更加便捷
- ImpactPredic-足球滚球数据统计参考分析软件
- SSM------MyBatis(更新中)
- 剑指 Offer 39. 数组中出现次数超过一半的数字
- GD32F130之Timer13定时器