python獲取當前url,python爬取整個網站_python爬取網站全部url鏈接

 2023-11-19 阅读 29 评论 0

摘要:御劍自帶了字典,主要是分析字典中的網址是否存在,但是可能會漏掉一些關鍵的網址,于是前幾天用python寫了一個爬取網站全部鏈接的爬蟲。 實現方法 python獲取當前url?主要的實現方法是循環,具體步驟看下圖: 貼上代碼: # author: sa

御劍自帶了字典,主要是分析字典中的網址是否存在,但是可能會漏掉一些關鍵的網址,于是前幾天用python寫了一個爬取網站全部鏈接的爬蟲。

實現方法

python獲取當前url?主要的實現方法是循環,具體步驟看下圖:

005GjT4tgy1fqq62nulyej30ce0kwjs2-2.jpg

貼上代碼:

# author: saucer_man

用python寫網絡爬蟲、# date:2018-04-24

# python3.6

import re

python爬蟲教程?import requests

# 獲取并檢驗要爬取的網站

def url_get():

python gui,url=input("please input the url:")

try:

kv={'user_agent':'Mozilla/5.0'}

python編程。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)

005GjT4tgy1fqq67l8ijkj30sd0bjq3d-2.jpg

005GjT4tgy1fqq67l187aj30l90l7js3-2.jpg

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/186093.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息