0

私はテキストのオンラインコーパスからスクレイプしようとしています。これらのテキストは、サイト上でツリー状に配置されています。OneはBページを開くAをクリックし、BはCをクリックしてテキストを開きます。 Aでは約50のリンクがあり、Bでは3から150の間で変化しますが、時にはCにもリンクがありますが、私はそれらに興味がありません。
私はこれを達成するために何をしましたか:私はAを開き、BeautifulSoupでそれを解析し、私が望むリンクを集めて.txtファイルとして保存しました。それから、私は次のことをしました:Pythonが無効なスキーマエラーを要求しました

私が望むすべてのリンクをリスト形式で与えました。 はその後、私はリスト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")) 

ストリップは、おそらくそこに機能はありませんが、私はそれを考えました傷つけません。このスクリプトは、要素に対してはうまく機能しました。私はそのリンクを参照してくださいするため

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 

プリントがあります。だから私はそれがだからここのページA.内のすべてのリンクのページBのレベル内のすべてのリンクを取得するための関数を書く時間が私の関数である、と思いましたその機能によって解決されており、何らかの理由でサーバを過充電しないように眠っているのですが、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]: 

そして は、私は次のエラーを受け取りました。

答えて

0

URLの周りの余分な文字があるようにそれをクリーンアップするためにstr.strip()を使用し、ルックス:あなたの推測は正しかった

g = requests.get(h.strip()) 
+0

、最初のURLの周りの余分な文字がありましたが、str.strip()」didnの私の問題を解決する代わりに、リスト内包の最初のURLをスキップし、2番目のURLからリストを開始しました。私の機能が今働いているようです。 –

関連する問題