Python爬取網頁的所有內外鏈
class Queue(object):
# 初始化佇列
def __init__(self):
self.items = []
# 入隊
def enqueue(self, item):
self.items.append(item)
# 出隊
def dequeue(self):
if self.is_Empty():
print(" 當前佇列為空!! ")
else:
return self.items.pop(0)
# 判斷是否為空
def is_Empty(self):
return self.items == []
# 佇列長度
def size(self):
return len(self.items)
# 返回隊頭元素,如果佇列為空的話,返回 None
def front(self):
if self.is_Empty():
print(" 當前佇列為空!! ")
else:
return self.items[len(self.items) - 1]
# 匯入庫
from urllib.request import urlopen
from urllib.parse import urlparse
from bs4 import BeautifulSoup
import requests
import re
import urllib.parse
import time
import random
queueInt = Queue() # 儲存內鏈的佇列
queueExt = Queue() # 儲存外鏈的佇列
externalLinks = []
internalLinks = []
# 獲取頁面中所有外鏈的列表
def getExterLinks(bs, exterurl):
# 找出所有以 www 或 http 開頭且不包含當前 URL 的連結
for link in bs.find_all('a', href = re.compile
('^(http|www)((?!'+urlparse(exterurl).netloc+').)*$')):
# 按照標準, URL 只允許一部分 ASCII 字元,其他字元(如漢字)是不符合標準的,
# 我們的連結網址可能存在漢字的情況,此時就要進行編碼。
link.attrs['href'] = urllib.parse.quote(link.attrs['href'],safe='?=&:/')
if link.attrs['href'] is not None:
if link.attrs['href'] not in externalLinks:
queueExt.enqueue(link.attrs['href'])
externalLinks.append(link.attrs['href'])
print(link.attrs['href'])
# return externalLinks
# 獲取頁面中所以內鏈的列表
def getInterLinks(bs, interurl):
interurl = '{}://{}'.format(urlparse(interurl).scheme,
urlparse(interurl).netloc)
# 找出所有以“ / ”開頭的內部連結
for link in bs.find_all('a', href = re.compile
('^(/|.*'+urlparse(interurl).netloc+')')):
link.attrs['href'] = urllib.parse.quote(link.attrs['href'],safe='?=&:/')
if link.attrs['href'] is not None:
if link.attrs['href'] not in internalLinks:
#startsWith()外匯跟單gendan5.com 方法用來判斷當前字串是否是以另外一個給定的子字串“開頭”的
if(link.attrs['href'].startswith('//')):
if interurl+link.attrs['href'] not in internalLinks:
queueInt.enqueue(interurl+link.attrs['href'])
internalLinks.append(interurl+link.attrs['href'])
elif(link.attrs['href'].startswith('/')):
if interurl+link.attrs['href'] not in internalLinks:
queueInt.enqueue(interurl+link.attrs['href'])
internalLinks.append(interurl+link.attrs['href'])
else:
queueInt.enqueue(link.attrs['href'])
internalLinks.append(link.attrs['href'])
# return internalLinks
def deepLinks():
num = queueInt.size()
while num > 1:
i = queueInt.dequeue()
if i is None:
break
else:
print(' 訪問的內鏈 ')
print(i)
print(' 找到的新外鏈 ')
# html = urlopen(i)
html=requests.get(i,headers=headers_)
time.sleep(random.random()*3)
domain1 = '{}://{}'.format(urlparse(i).scheme, urlparse(i).netloc)
bs = BeautifulSoup(html.content, 'html.parser')
getExterLinks(bs, domain1)
getInterLinks(bs, domain1)
def getAllLinks(url):
global num
# html = urlopen(url)
headers_={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68'}
html = requests.get(url,headers=headers_)
time.sleep(random.random()*3) # 模擬人類行為,間隔隨機的時間
domain = '{}://{}'.format(urlparse(url).scheme, urlparse(url).netloc)
bs = BeautifulSoup(html.content, 'html.parser')
getInterLinks(bs, domain)
getExterLinks(bs, domain)
deepLinks()
getAllLinks('https://image.baidu.com/')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2767312/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用Python爬取WordPress官網所有外掛Python
- python 爬蟲如何爬取動態生成的網頁內容Python爬蟲網頁
- Python 爬取網頁中JavaScript動態新增的內容(一)Python網頁JavaScript
- Python 爬取網頁中JavaScript動態新增的內容(二)Python網頁JavaScript
- 關於python爬取網頁Python網頁
- Python爬蟲爬取B站up主所有動態內容Python爬蟲
- python爬取網頁詳細教程Python網頁
- 如何使用python進行網頁爬取?Python網頁
- Python網路爬蟲(正則, 內涵段子,貓眼電影, 鏈家爬取)Python爬蟲
- Python 爬取網頁資料的兩種方法Python網頁
- Python 爬蟲進階篇-利用beautifulsoup庫爬取網頁文章內容實戰演示Python爬蟲網頁
- 爬取網頁文章網頁
- 網頁用python爬取後如何解析網頁Python
- 手機版python爬取網頁書籍Python網頁
- python爬蟲爬取網頁中文亂碼問題的解決Python爬蟲網頁
- python爬蟲:使用BeautifulSoup修改網頁內容Python爬蟲網頁
- 爬蟲——網頁爬取方法和網頁解析方法爬蟲網頁
- Python網路爬蟲之爬取淘寶網頁頁面 MOOC可以執行的程式碼Python爬蟲網頁
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- java 爬取網頁內容。 標題、圖片等Java網頁
- Python應用開發——爬取網頁圖片Python網頁
- Python 爬蟲網頁內容提取工具xpath(二)Python爬蟲網頁
- Python 爬蟲網頁內容提取工具xpath(一)Python爬蟲網頁
- node:爬蟲爬取網頁圖片爬蟲網頁
- 自學python網路爬蟲,從小白快速成長,分別實現靜態網頁爬取,下載meiztu中圖片;動態網頁爬取,下載burberry官網所有當季新品圖片。Python爬蟲網頁
- Python筆記:網頁資訊爬取簡介(一)Python筆記網頁
- python爬蟲--爬取鏈家租房資訊Python爬蟲
- python爬取網圖Python
- Python爬取內涵段子裡的段子Python
- 網站的外鏈與內鏈建設。網站
- ferret 爬取動態網頁網頁
- Puppeteer爬取網頁資料網頁
- Python網路爬蟲第三彈《爬取get請求的頁面資料》Python爬蟲
- 使用 xpath 爬取當前頁面所有城市名稱
- [譯] 如何使用 Python 和 BeautifulSoup 爬取網站內容Python網站
- 用python爬取鏈家的租房資訊Python
- Python爬蟲教程-13-爬蟲使用cookie爬取登入後的頁面(人人網)(下)Python爬蟲Cookie
- Python爬蟲教程-12-爬蟲使用cookie爬取登入後的頁面(人人網)(上)Python爬蟲Cookie