御剑自带了字典,主要是分析字典中的网址是否存在,但是可能会漏掉一些关键的网址,于是前几天用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链接相关推荐

  1. python爬取房源数据_python爬取安居客二手房网站数据(实例讲解)

    是小打小闹 哈哈,现在开始正式进行爬虫书写首先,需要分析一下要爬取的网站的结构:作为一名河南的学生,那就看看郑州的二手房信息吧! 在上面这个页面中,我们可以看到一条条的房源信息,从中我们发现了什么,发 ...

  2. python爬取小说网站_Python爬取小说网站下载小说

    1前言 这个小程序是用来爬取小说网站的小说的,一般的盗版小说网站都是很好爬取的 因为这种网站基本没有反爬虫机制的,所以可以直接爬取 该小程序以该网站http://www.126shu.com/15/下 ...

  3. python爬虫淘宝评论_Python爬取淘宝店铺和评论

    1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...

  4. python爬取网页新闻_Python爬取新闻网数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 基本开发环境 Pyth ...

  5. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  6. python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  7. python爬取手机微信_Python爬取微信好友

    前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 itchat安装 对微信的控制可以使用itchat来实现,我们找到itc ...

  8. python爬取酒店信息_Python 爬取美團酒店信息

    事由:近期和朋友聊天,聊到黃山酒店事情,需要了解一下黃山的酒店情況,然后就想着用python 爬一些數據出來,做個參考 主要思路:通過查找,基本思路清晰,目標明確,僅僅爬取美團莫一地區的酒店信息,不過 ...

  9. python爬取学校新闻_Python抓取学院新闻报告

    们发现,我们能够直接在新闻详情页面抓取到我们需要的数据:标题,时间,内容.URL. 好,到现在我们清楚抓取一篇新闻的思路了.但是,如何抓取所有的新闻内容呢? 这显然难不到我们. 我们在新闻栏目的最下方 ...

最新文章

  1. Nagios监控linux服务器
  2. 特斯拉线圈的阻抗分析
  3. activeMQ 安装部署文档
  4. DL之PanopticFPN:Panoptic FPN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. 设计模式--门面(Facade)模式
  6. vue开发小程序Demo
  7. MAC地址与IP地址
  8. Servlet 客户端 HTTP 请求
  9. ESXi添加第三方驱动
  10. JAVA代码 httpclient 模拟NTLM域登录 GET、POST两种连接方式
  11. linux live运行 光盘弹出复,通过liveCD进行ubuntu启动修复
  12. Spring AOP中的责任链设计模式
  13. 遍历出List<Map>的Key / Value
  14. P5167 xtq的神笔
  15. Retina、非Retina、点、像素、iPhone分辨率
  16. 大学生无线耳机怎么选?内行推荐四款高性价比蓝牙耳机
  17. ECDH secp256k1 集成
  18. android如何屏蔽掉home键
  19. 微信提现免费额度领取,快来领取!我领取了738元
  20. Python下安装Pywifi进行WiFi密码破解

热门文章

  1. 4-2路径规划HybridA*Kinodynamic RRT*
  2. 计算机设计基于Android实现高德地图校内导航出行app【项目源码+简要论文说明】
  3. lsd 特征点匹配代码_线特征LSD and 描述子LBD---LBD算法(二)
  4. 时间频度,时间复杂度的计算
  5. 【python学习】-matplotlib绘制双坐标柱状图
  6. 软件评测师——软件工程基础知识2
  7. 面试必考:秒杀系统要如何设计?
  8. PLSQL12.07安装使用教程(1)
  9. 如何解决数据库死锁问题?
  10. 把字符串转换成int整数