Pythonはホームページの内外チェーンのコードをすべて取得します。
プロジェクト紹介
広さ優先検索方法を用いて、ウェブサイト上のすべての外部チェーンを取得する。
まず、私達は1つのホームページに入り、ウェブページのすべての内部チェーンと外部チェーンを取得し、それぞれ内部チェーンに入り、その内チェーンのすべての内チェーンと外チェーンを取得します。
コードアウトライン
1、クラスで一つの列を定義し、先に出て、チームの最後に入隊し、チームの先頭から出る;
2、4つの関数を定義して、それぞれウェブページの外部チェーンを登って、ウェブページの内部チェーンを取って、内部チェーンの関数に入って、そして関数を調整します。
3、百度の写真を登る(https://image.baidu.com/)まず、2つの列と2つの配列を定義し、それぞれ内部チェーンと外部チェーンを保存する。プログラム開始時に、まず現在のウェブページの内部チェーンと外部チェーンを登り、それぞれチームに入り、内部チェーンの外部チェーンを判断します。もし配列に存在しないなら、これを配列に追加します。
4、続いてdeeplinks()関数を呼び出して、循環構造を採用し、現在の内部チェーンの数が空でない場合は、格納内チェーンのキューを列から出して、その内部チェーンに入って、ウェブページ内チェーンとウェブページ外チェーンの関数を繰り返し呼び出して、ウェブリンクが重複しているかどうかを判断します。重複しない場合は、それぞれ内部チェーン、外部チェーンを対応するキューに追加します。繰り返し;
5、ウェブページ内のすべての内部チェーンに入って、中からすべての外部チェーンを検索してキューに保存してから出力します。
公式サイト
コードの詳細
キュー
キューは特殊な線形表で、一方の列は端にデータ(後)を挿入するだけで、他端はデータ(前)を削除することができます。
それはスタックと同じで、キューは制限された線形表である。
挿入操作をすることをチームの最後といい、削除操作を行うことをチームヘッドといいます。
キューのデータを要素と呼びます。要素のないキューを空のキューと呼びます。
端だけが削除されたり、挿入されたりするので、最初に列に入るだけが削除されます。したがって、先进先出(FIFO-first in first out)とも言われます。
ここで私たちはクラスで列を定義して、先に出発して、列の最後に入隊して、列の頭は隊を出て、この列は以下の機能を定義します。
内鎖外鎖の違い:
内鎖:同じウェブサイトのドメイン名の下でコンテンツページ間の相互リンクを指します。
外部チェーン:他のサイトに自分のサイトのリンクを導入すること。例えば、友情リンク、外部チェーンの構築など。
通俗的には、内部チェーンは同じドメイン名を持つリンクであり、外部チェーンのドメイン名は同じではない。
内鎖外部チェーンと言えば、必ずurllibライブラリから離れられなくなります。まずライブラリを導入します。
Headerソースはブラウザでアクセスするウェブページを開き、F 12によってnetworkを開いて、ヒントを押してctr+Rを押して、nameをクリックしてウェブサイト名を選択して、右フレームの最初のheadersを見て、request headersを見つけます。これはブラウザの要求ヘッダです。その中のuser-agentをコピーして、内容をコピーします。
ここの要求先は:
ここは部分を切り取るだけです。
配列内のすべての内部チェーン
広さ優先検索方法を用いて、ウェブサイト上のすべての外部チェーンを取得する。
まず、私達は1つのホームページに入り、ウェブページのすべての内部チェーンと外部チェーンを取得し、それぞれ内部チェーンに入り、その内チェーンのすべての内チェーンと外チェーンを取得します。
コードアウトライン
1、クラスで一つの列を定義し、先に出て、チームの最後に入隊し、チームの先頭から出る;
2、4つの関数を定義して、それぞれウェブページの外部チェーンを登って、ウェブページの内部チェーンを取って、内部チェーンの関数に入って、そして関数を調整します。
3、百度の写真を登る(https://image.baidu.com/)まず、2つの列と2つの配列を定義し、それぞれ内部チェーンと外部チェーンを保存する。プログラム開始時に、まず現在のウェブページの内部チェーンと外部チェーンを登り、それぞれチームに入り、内部チェーンの外部チェーンを判断します。もし配列に存在しないなら、これを配列に追加します。
4、続いてdeeplinks()関数を呼び出して、循環構造を採用し、現在の内部チェーンの数が空でない場合は、格納内チェーンのキューを列から出して、その内部チェーンに入って、ウェブページ内チェーンとウェブページ外チェーンの関数を繰り返し呼び出して、ウェブリンクが重複しているかどうかを判断します。重複しない場合は、それぞれ内部チェーン、外部チェーンを対応するキューに追加します。繰り返し;
5、ウェブページ内のすべての内部チェーンに入って、中からすべての外部チェーンを検索してキューに保存してから出力します。
公式サイト
コードの詳細
キュー
キューは特殊な線形表で、一方の列は端にデータ(後)を挿入するだけで、他端はデータ(前)を削除することができます。
それはスタックと同じで、キューは制限された線形表である。
挿入操作をすることをチームの最後といい、削除操作を行うことをチームヘッドといいます。
キューのデータを要素と呼びます。要素のないキューを空のキューと呼びます。
端だけが削除されたり、挿入されたりするので、最初に列に入るだけが削除されます。したがって、先进先出(FIFO-first in first out)とも言われます。
ここで私たちはクラスで列を定義して、先に出発して、列の最後に入隊して、列の頭は隊を出て、この列は以下の機能を定義します。
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]
内鎖外鎖内鎖外鎖の違い:
内鎖:同じウェブサイトのドメイン名の下でコンテンツページ間の相互リンクを指します。
外部チェーン:他のサイトに自分のサイトのリンクを導入すること。例えば、友情リンク、外部チェーンの構築など。
通俗的には、内部チェーンは同じドメイン名を持つリンクであり、外部チェーンのドメイン名は同じではない。
内鎖外部チェーンと言えば、必ずurllibライブラリから離れられなくなります。まずライブラリを導入します。
from urllib.parse import urlparse
url parseモジュールを用いてurlリンクを解析し、url parse()モジュールはurlを6つの部分に分割する。
scheme ( )
netloc ( )
path ( )
params ( )
query ( )
fragment ( )
url='https://image.baidu.com/'
a, b = urlparse(url).scheme, urlparse(url).netloc
print(a)
print(b)
#----------------- ---------------------#
https
image.baidu.com
請求先Headerソースはブラウザでアクセスするウェブページを開き、F 12によってnetworkを開いて、ヒントを押してctr+Rを押して、nameをクリックしてウェブサイト名を選択して、右フレームの最初のheadersを見て、request headersを見つけます。これはブラウザの要求ヘッダです。その中のuser-agentをコピーして、内容をコピーします。
ここの要求先は:
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_)
完全コード
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() “ ”
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/')
登って結果を出すここは部分を切り取るだけです。
配列内のすべての内部チェーン
internalLinks
------------- ------------------
['http://image.baidu.com',
'https://image.baidu.com/img/image/imageplus/index.html?fr=image',
'http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1567133149621_R&pv=&ic=0&nc=1&z=0&hd=0&latest=0©right=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%25E5%25A3%2581%25E7%25BA%25B8',
'http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1461834053046_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&itg=0&ie=utf-8&word=%25E5%25A4%25B4%25E5%2583%258F%23z=0&pn=&ic=0&st=-1&face=0&s=0&lm=-1',
'https://image.baidu.com/search/albumslist?tn=albumslist&word=%25E8%25AE%25BE%25E8%25AE%25A1%25E7%25B4%25A0%25E6%259D%2590&album_tab=%25E8%25AE%25BE%25E8%25AE%25A1%25E7%25B4%25A0%25E6%259D%2590&rn=15&fr=searchindex',
'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%25E5%259F%258E%25E5%25B8%2582%25E5%25BB%25BA%25E7%25AD%2591%25E6%2591%2584%25E5%25BD%25B1%25E4%25B8%2593%25E9%25A2%2598&fr=searchindex_album%2520&album_tab=%25E5%25BB%25BA%25E7%25AD%2591&album_id=7&rn=30',
'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%25E6%25B8%2590%25E5%258F%2598%25E9%25A3%258E%25E6%25A0%25BC%25E6%258F%2592%25E7%2594%25BB&fr=albumslist&album_tab=%25E8%25AE%25BE%25E8%25AE%25A1%25E7%25B4%25A0%25E6%259D%2590&album_id=409&rn=30',
'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%25E7%259A%25AE%25E5%25BD%25B1&fr=albumslist&album_tab=%25E8%25AE%25BE%25E8%25AE%25A1%25E7%25B4%25A0%25E6%259D%2590&album_id=394&rn=30',
'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%25E5%25AE%25A0%25E7%2589%25A9%25E5%259B%25BE%25E7%2589%2587&fr=albumslist&album_tab=%25E5%258A%25A8%25E7%2589%25A9&album_id=688&rn=30',
'https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%25E8%2588%25AA%25E6%258B%258D%25E5%259C%25B0%25E7%2590%2583%25E7%25B3%25BB%25E5%2588%2597&fr=albumslist&album_tab=%25E8%25AE%25BE%25E8%25AE%25A1%25E7%25B4%25A0%25E6%259D%2590&album_id=312&rn=30',
'https://image.baidu.com/search/albumslist?tn=albumslist&word=%25E4%25BA%25BA%25E7%2589%25A9&album_tab=%25E4%25BA%25BA%25E7%2589%25A9&rn=15&fr=searchindex_album',
'http://image.baidu.com/static/html/advanced.html',
'https://image.baidu.com/',
'http://image.baidu.com/']
配列内のすべての外部チェーン
externalLinks
------------- ------------------
['http://news.baidu.com/',
'https://www.hao123.com/',
'http://map.baidu.com/',
'https://haokan.baidu.com/?sfrom=baidu-top/',
'http://tieba.baidu.com/',
'https://xueshu.baidu.com/',
'http://www.baidu.com/more/',
'https://pan.baidu.com',
'https://zhidao.baidu.com',
'https://baike.baidu.com',
'https://baobao.baidu.com',
'https://wenku.baidu.com',
'https://jingyan.baidu.com',
'http://music.taihe.com',
'https://www.baidu.com',
'https://www.baidu.com/',
'http://www.baidu.com/duty/',
'http://www.baidu.com/search/image_help.html',
'http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11000002000001',
'http://help.baidu.com/question',
'http://www.baidu.com/search/jubao.html',
'http://www.baidu.com/search/faq_image.html%2305']
ここで、Pythonがウェブサイトの内外チェーンを利用している記事を紹介します。これに関連して、Pythonがホームページの内外チェーンを利用しているものがもっと多いです。私たちの以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。