2017-02-20 7 views
0

私はPythonで、私はURLのリストから返すプログラムを持っています。それらのいくつかは、彼らは私がテキストファイルにに2つのURLを読み込む例えばリスト<title>タグを返すようにしたいが返す<title>悪い要求<.title> Python 3

に一緒に置かれている不正な要求を返す

は:

http://www.scientific.net/MSF 
http://www.scientific.net/JMNM 

それは返す:

<title>Bad Request</title> 
<title>Journal of Metastable and Nanocrystalline Materials</title> 

リストに最初のURLしかない場合は、コードが正常に機能します。悪い要求の代わりに両方のタイトルを取り戻すにはどうしたらいいですか?

マイコード:

url_list= [] 

f = open('test.txt','r') #text file with url 
for line in f: 
    url_list.append(line) 

for link in url_list: 
    try: 
     r = requests.get(link) 
     soup = BeautifulSoup(r.content,"html.parser") 
     title = soup.title 
     title.string = title.get_text(strip = True) 
     print(str(title)) 

    except: 
     print("No Title Found ") 
     continue 

答えて

1

テキストファイルからの読み取りに問題があります。 for link in url_listループでは、linkの最初の値はhttp://www.scientific.net/MSF\nになります。最後に\nがエラーBad Requestになります。あなたがそれらを読むと、行から\nを取り除くと、あなたのコードは動作します。あなたの最後の行には\nが含まれていないようですので、単にurl_list.append(line[:-1])を使用すると最後の行に失敗します。

0
r = requests.get(link) 
    soup = BeautifulSoup(r.content,"html.parser") 
    #title = soup.title 
    titles = soup.find_all('title') 
    for title in titles: 
     title.string = title.get_text(strip = True) 
     print(str(title)) 

..find()のショートカットがあり、それは最初のマッチが返されます、あなたはすべてのmatchsを返すためにfind_all()を使用する必要があります。

関連する問題