2017-10-16 26 views
0

今、私はすべてのURLをウェブページから削り取ろうとしました。それは完全に5つのカテゴリを持ち、すべてのカテゴリは異なるページを持っています(すべてのページに10の記事があります)。例えば次のページのURLをPythonで取得

Categories Pages 
Banana   5 
Apple   14 
Cherry   7 
Melon   6 
Berry   2 

コード:

import requests 
from bs4 import BeautifulSoup 
import re 
from urllib.parse import urljoin 


res = requests.get('http://www.abcde.com/SearchParts') 
soup = BeautifulSoup(res.text,"lxml") 
href = [ a["href"] for a in soup.findAll("a", {"id" : re.compile("parts_img.*")})] 
b1 =[] 
for url in href: 
    b1.append("http://www.abcde.com"+url) 
print (b1) 

のメインページから "http://www.abcde.com/SearchParts" 私はすべてのカテゴリの最初のページのURLをこすりすることができます。 b1は最初のページのURLのリストです。

Categories Pages      url 
Banana   1  http://www.abcde.com/A 
Apple   1  http://www.abcde.com/B 
Cherry   1  http://www.abcde.com/C 
Melon   1  http://www.abcde.com/E 
Berry   1  http://www.abcde.com/F 

その後、私は、次のページのURLを掻き取るB1のソースコードを使用します。このよう

。 b2は第2ページのURLのリストです。

コード:このように

b2=[] 
for url in b1: 
    res2 = requests.get(url).text 
    soup2 = BeautifulSoup(res2,"lxml") 
    url_n=soup2.find('',rel = 'next')['href'] 
    b2.append("http://www.abcde.com"+url_n) 
print(b2) 

:私は第三いずれかを実行しようとするとベリーの2ページ目が最後のページであるため、

Categories Pages      url 
    Banana   1  http://www.abcde.com/A/s=1&page=2 
    Apple   1  http://www.abcde.com/B/s=9&page=2 
    Cherry   1  http://www.abcde.com/C/s=11&page=2 
    Melon   1  http://www.abcde.com/E/s=7&page=2 
    Berry   1  http://www.abcde.com/F/s=5&page=2 

は今、それは誤りだ、それは「次を持っていません"ソースコード内にあります。すべてのカテゴリに異なるページやURLがある場合、特に何をすべきですか?

コード全体(それがエラーを得たまで):

import requests 
from bs4 import BeautifulSoup 
import re 
from urllib.parse import urljoin 


res = requests.get('http://www.ca2-health.com/frontend/SearchParts') 
soup = BeautifulSoup(res.text,"lxml") 
href = [ a["href"] for a in soup.findAll("a", {"id" : re.compile("parts_img.*")})] 
b1 =[] 
for url in href: 
    b1.append("http://www.ca2-health.com"+url) 
print (b1) 
print("===================================================") 
b2=[] 
for url in b1: 
    res2 = requests.get(url).text 
    soup2 = BeautifulSoup(res2,"lxml") 
    url_n=soup2.find('',rel = 'next')['href'] 
    b2.append("http://www.ca2-health.com"+url_n) 
print(b2) 
print("===================================================") 
b3=[] 
for url in b2: 
    res3 = requests.get(url).text 
    soup3 = BeautifulSoup(res3,"lxml") 
    url_n=soup3.find('',rel = 'next')['href'] 
    b3.append("http://www.ca2-health.com"+url_n) 
print(b3) 

そして私は、このページからすべてのURLを持つことになりますので、この後、私はリストとしてB1、B2、B3と...を行います。前もって感謝します。

答えて

0

エラートレースバックを投稿した場合に役立ちます。しかし、私はあなたがKeyErrorを得ていると推測しています。例外を処理し、ループを続行します。あなたがKeyErrorを取得している場合は次のようにします。

try: 
    url_n=soup3.find('',rel = 'next')['href'] 
except KeyError: 
    continue 

OR

try: 
    url_n=soup3.find('',rel = 'next').get('href') 
except AttributeError: 
    continue 

は、このことができますなら、私に教えてください。

関連する問題