我試圖從網上語料庫中刮取。這些文本在網站上以樹狀方式排列:一次單擊A打開一個B頁面,在B中單擊一次C打開文本。在A中有大約50個鏈接,在B中,它在3到150之間變化,C中有時也有鏈接,但我對它們不感興趣。
這是我做到的:我打開了A,我用BeautifulSoup解析了它,收集了我想要的鏈接,並將它保存爲一個.txt文件。然後,我做了以下操作:python請求無效的模式錯誤
Url_List=[]
with open("Aramaic_Url_List.txt", "r") as Url_List:
urls=Url_List.read()
A_url_list=urls.splitlines()
Yeni_A_url_list=[showsubtexts for showsubtexts in A_url_list if len(showsubtexts)>52]
哪給了我想要從列表形式的頁面A的所有鏈接。 後來我寫了一個小腳本來測試我是否可以從列表Yeni_A_url_list
的元素B中頁面的鏈接,這裏是我的腳本:
data2=requests.get(Yeni_A_url_list[1].strip())
data2.raise_for_status()
data2_Metin=data2.text
soup_data2=BeautifulSoup(data2_Metin, "lxml")
for link in soup_data2.find_all("a"):
print(link.get("href"))
帶鋼可能有有沒有作用,但我認爲它不會傷害。這個腳本對一個元素來說工作得很好。因此,我認爲,是時候寫一個函數來獲取所有的網頁B級在頁面A.因此,這裏的每一個環節的鏈接是我的函數:
def ListedenLinkAl(h):
if h in Yeni_A_url_list:
print(h)
g=requests.get(h)
g.raise_for_status()
data_mtn=g.text
data_soup=BeautifulSoup(data_mtn,"lxml")
oP=[b.get("href") for b in data_soup.find_all("a")]
tk=list(set(oP))
sleep(3)
return tk
打印是那裏我看到了鏈接,已經由函數計算出來,並且睡眠在那裏不會使服務器過度充電,儘管由於某種原因time.sleep顯示語法錯誤。該功能也工作了列表的單個元素,這意味着以下工作:ListedenLinkAl(Yeni_A_url_list[1])
因此,我認爲,現在是時候該功能適用於列表Yeni_A_url_list
的每一個元素,並做了一個列表理解:
Temiz_url_Listesi=[ListedenLinkAl(x) for x in Yeni_A_url_list]
我收到以下錯誤:
In [45]: Temiz_url_Listesi=[ListedenLinkAl(x) for x in Yeni_A_url_list]
http://cal1.cn.huc.edu/showsubtexts.php?keyword=21200
Traceback (most recent call last):
File "<ipython-input-45-8e4811c83c3f>", line 1, in <module>
Temiz_url_Listesi=[ListedenLinkAl(x) for x in Yeni_A_url_list]
File "<ipython-input-45-8e4811c83c3f>", line 1, in <listcomp>
Temiz_url_Listesi=[ListedenLinkAl(x) for x in Yeni_A_url_list]
File "<ipython-input-36-390e6ed1eae5>", line 6, in ListedenLinkAl
g=requests.get(h)
File "/home/dk/anaconda3/lib/python3.5/site-packages/requests/api.py", line 67, in get
return request('get', url, params=params, **kwargs)
File "/home/dk/anaconda3/lib/python3.5/site-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/home/dk/anaconda3/lib/python3.5/site-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/home/dk/anaconda3/lib/python3.5/site-packages/requests/sessions.py", line 570, in send
adapter = self.get_adapter(url=request.url)
File "/home/dk/anaconda3/lib/python3.5/site-packages/requests/sessions.py", line 644, in get_adapter
raise InvalidSchema("No connection adapters were found for '%s'" % url)
InvalidSchema: No connection adapters were found for 'http://cal1.cn.huc.edu/showsubtexts.php?keyword=21200'
In [46]:
我不知道爲什麼函數對於列表中的一個元素,但不能在列表理解。
你的猜測是正確的,有一圈第一url一個額外字符,但str.strip()沒」 t解決了我的問題,而是跳過列表理解中的第一個url,並從第二個url開始列表。看來我的功能現在正在工作。 –