Ich versuche, von einem on-line-Korpus der Texte zu kratzen. Diese Texte sind auf der Site baumartig angeordnet: Ein Klick auf A öffnet eine B-Seite, in B klickt man auf C und öffnet den Text. In A gibt es ungefähr ~ 50 Links, in B variiert es zwischen 3 und ~ 150, es gibt auch Links in C, aber ich bin nicht an ihnen interessiert.
Hier ist, was ich getan habe, um dies zu erreichen: Ich öffnete das A, ich analysierte es mit BeautifulSoup, ich sammelte die Links, die ich wollte, und speicherte es als. TXT-Datei. Dann habe ich die folgenden:Python fordert ungültiges Schemafehler an
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]
Was mich gab alle Links, die ich von Seite A in einer Listenform wollte. Dann habe ich ein kleines Skript geschrieben zu testen, ob ich Yeni_A_url_list
die Links in B-Seite von einem Element der Liste erhalten, hier ist mein Skript:
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"))
Der Streifen wahrscheinlich keine Funktion gibt, aber ich dachte, es würde nicht weh tun. Das Skript funktionierte ziemlich gut für ein Element. Also dachte ich, es Zeit ist, eine Funktion zu erhalten, alle Links in Seite B-Ebene für jeden Link in Seite A schreiben So, hier ist meine Funktion:
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
Druck ist für mich die Links zu sehen, dass wurden von der Funktion ausgearbeitet, und Schlaf ist da, um den Server nicht zu überlasten, obwohl time.sleep aus irgendeinem Grund einen Fehler in der Syntax enthüllte. Die Funktion arbeitete auch für ein einzelnes Element der Liste, die Bedeutung folgenden gearbeitet: ListedenLinkAl(Yeni_A_url_list[1])
Also dachte ich, es ist Zeit, um diese Funktion zu jedem Element der Liste Yeni_A_url_list
und hat eine Liste Verständnis anzuwenden:
Temiz_url_Listesi=[ListedenLinkAl(x) for x in Yeni_A_url_list]
Und ich erhielt den folgenden Fehler:
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]:
ich habe keine Ahnung, warum die Funktion für ein einzelnes Element in der Liste funktioniert, aber nicht in der Liste Verständnis.
Ihre Vermutung richtig war, gab es ein zusätzliches Zeichen um das erste URL, aber str.strip() didn‘ Ich löste mein Problem, stattdessen übersprang ich die erste URL im Listenverständnis und startete die Liste von der zweiten URL aus. Es scheint, als ob meine Funktion jetzt funktioniert. –