2016-03-19 10 views
0

Ich versuche, eine Website zu kratzen und das Problem, in das ich hineinlaufe, ist die Seite braucht Zeit zum Laden. Wenn ich mit dem Scraping fertig bin, kann ich also nur fünf Elemente bekommen, wenn es 25 sein kann. Gibt es eine Möglichkeit, Python zu verlangsamen? Ich verwende BeautifulSoup Hier den Code ich verwendeVerlangsamen Sie ein WebScrape mit Python

import urllib 
import urllib.request 
from bs4 import BeautifulSoup 

theurl="http://agscompany.com/product-category/fittings/tube-nuts/316-tube/" 
thepage = urllib.request.urlopen(theurl) 
soup = BeautifulSoup(thepage,"html.parser") 

for pn in soup.find_all('div',{"class":"shop-item-text"}): 
    pn2 = pn.text 
    print(pn2) 

Danke

+0

Bitte senden Sie Ihren Code ... – Signal

+1

Es ist wahrscheinlicher, dass die Webseite Javascript verwendet mehr Elemente als die Benutzerrollen zu laden. –

+0

Code hinzugefügt - Entschuldigung – PatrickP76

Antwort

2

Alle Ergebnisse können von Thesen Seiten zugegriffen werden:

http://agscompany.com/product-category/fittings/tube-nuts/316-tube/page/ http://agscompany.com/product-category/fittings/tube-nuts/316-tube/page/2/ ...

So können Sie mit einer Schleife auf die Seitennummer zugreifen:

import urllib 
import urllib.request 
from bs4 import BeautifulSoup 

theurl="http://agscompany.com/product-category/fittings/tube-nuts/316-tube/" 
for i in range(1,5): 
    thepage = urllib.request.urlopen(theurl + '/page/' + str(i) + '/') 
    soup = BeautifulSoup(thepage,"html.parser") 

    for pn in soup.find_all('div',{"class":"shop-item-text"}): 
     pn2 = pn.text 
     print(pn2) 
0

Weitere generische Version von @ Kenavoz Antwort.

Dieser Ansatz interessiert nicht, wie viele Seiten es gibt.

Auch würde ich für requests statt urllib gehen.

import requests 
from bs4 import BeautifulSoup 

url_pattern = 'http://agscompany.com/product-category/fittings/tube-nuts/316-tube/page/{index}/' 
status_code = 200  
url_index = 1 

while status_code == 200: 
    url = url_pattern.format(index=url_index) 
    response = requests.get(url) 

    status_code = response.status_code 
    url_index += 1 

    soup = BeautifulSoup(response.content, 'html.parser') 
    page_items = soup.find_all('div', {'class': 'shop-item-text'}) 

    for page_item in page_items: 
     print(page_item.text)