2017-02-05 7 views
2

このページをスクラップしようとしていますhttps://www.anesishome.gr/%CE%B2%CF%81%CE%B5%CF%86%CE%B9%CE%BA%CE%AC-159#!/ 最初の5ページでは、各製品の名前と価格が必要です。問題は私のコードが最初のページの結果を5回与えることです。私は次のページのURLを変更していないかのように。私は間違って何をしていますか?ありがとうございました!複数のページをPythonでスクラップすると、最初のページだけが繰り返されます

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
for i in range(5): 
    page="https://www.anesishome.gr/%CE%B2%CF%81%CE%B5%CF%86%CE%B9%CE%BA%CE%AC-159#!/page-{}".format(i) 
    html = urlopen(page) 
    soup=BeautifulSoup(html, "html.parser") 
    pin=[None]*240 
    puk=[None]*240 
    k=soup.find("ul", class_="product-grid row") 
    titles=k.find_all("a", class_="product_image") 
    i=0 
    for title in titles: 
     pin[i]=title.get("title") 
     i=i+1 
    t=soup.find("ul", class_="product-grid row") 
    prices=t.find_all("span", class_="price") 
    i=0 
    for price in prices: 
     puk[i]=price.get_text() 
     i=i+1 
    x=0 
    with open('vrefika.txt', 'w') as f: 
     for x in range(0,i): 
      print(pin[x]) 
      print("price=",puk[x]) 
      string=pin[x] 
      f.write(string+"\n") 
      string=puk[x] 
      f.write(string+"\n") 

答えて

0

私はこれが役立つことを願って、あなたのためのデモを作った:アウト

import requests 
from bs4 import BeautifulSoup 
for i in range(1, 6): # page start at 1, end with 5 
    page="https://www.anesishome.gr/%CE%B2%CF%81%CE%B5%CF%86%CE%B9%CE%BA%CE%AC-159?p={}".format(i) 
    html = requests.get(page) 
    soup = BeautifulSoup(html.text, 'lxml') 
    product_list = soup.find('div', id="product_list") # get product_list 

    for item in product_list('li', class_='ajax_block_product'): # itertate over each product 
     title = item.find('h5').text 
     price = item.find(class_="price").text 
     print(title, price) 

ΠΕΤΣΕΤΑ ΒΡΕΦΙΚΗ NEF - NEF HAPPY DAY MINT 40X60 2,66 € 
ΠΑΙΔΙΚΗ ΠΕΤΣΕΤΑ ΧΕΡΙΩΝ NEF - NEF SNOOPY FRIENDS 3,50 € 
Πετσετάκια ώμου σε σετ 3 τεμαχίων Pierre Cardin 4,80 € 
Σαλιάρα Pierre Cardin 74 5,60 € 
Σαλιάρα Pierre Cardin 135 5,60 € 
ΒΡΕΦΙΚΟ ΜΑΞΙΛΑΡΙ ΜΑΛΑΚΟ NEF-NEF BALLFIBER 6,75 € 
ΣΑΛΙΑΡΑ NEF-NEF TINY FRIENDS 7,20 € 
ΣΑΛΙΑΡΑ NEF-NEF PLAY NOW 7,20 € 
Pierre Cardin baby design 035 Πάνες Φανελένιες 7,20 € 
Pierre Cardin baby design 036 Πάνες Φανελένιες 7,20 € 
Baby Oliver design 212 Πάνες χασέ 7,20 € 
+1

を期待宏杰@これは私が何であったかexcactlyです探している。ありがとうございました! – nesi

+0

** "" ...%AC-159#!/ pageの代わりに** "...%AC-159?p = {}"。 - {} "。format(i)" **私のコードでは? – nesi

+0

@dimosbeleハッシュマーク '#'によって導入されたフラグメント識別子は、ドキュメントのURLのオプションの最後の部分です。これは通常、その文書の一部を識別するために使用されます。 '#'はブラウザで処理されますが、通常は気にしません。 –

0

このページは次のページを読み込むためにはJavaScript/AJAXを使用しています - そして、このAJAXは、URL

https://www.anesishome.gr/modules/blocklayered/blocklayered-ajax.php?id_category_layered=159&layered_price_slider=2_350&orderby=price&orderway=asc&n=48&p=2&_=1486296430052

p=2は、ページ番号で使用しています。

結果は、JSON文字列

{"filtersBlock":"<script type=\"text\/javascript\">\ncurrent_friendly_url = '#!\/page-2';\nparam_product_url 

ですが、多分あなたは、あなたはJSONモジュール/パーサを使用してHTMLを取得するには、文字列のスライスを使用することができます。

+0

李は多分誰かが完全に動作するプログラム:) – furas