2016-11-16 4 views
2

Ich versuche, bestimmte Klassen aus mehreren URLs zu extrahieren. Die Tags und Klassen bleiben gleich, aber ich brauche mein Python-Programm, um alle zu kratzen, da ich gerade meinen Link eingib.Kratzen mehrere URLs mit schönen Suppe

Hier ist eine Probe meiner Arbeit:

from bs4 import BeautifulSoup 
import requests 
import pprint 
import re 
import pyperclip 

url = input('insert URL here: ') 
#scrape elements 
response = requests.get(url) 
soup = BeautifulSoup(response.content, "html.parser") 

#print titles only 
h1 = soup.find("h1", class_= "class-headline") 
print(h1.get_text()) 

Diese für einzelne URLs funktioniert, aber nicht für eine Charge. Danke für die Hilfe. Ich habe viel von dieser Gemeinschaft gelernt.

Antwort

2

Haben Sie eine Liste von URLs und durchlaufen Sie sie.

from bs4 import BeautifulSoup 
import requests 
import pprint 
import re 
import pyperclip 

urls = ['www.website1.com', 'www.website2.com', 'www.website3.com', .....] 
#scrape elements 
for url in urls: 
    response = requests.get(url) 
    soup = BeautifulSoup(response.content, "html.parser") 

    #print titles only 
    h1 = soup.find("h1", class_= "class-headline") 
    print(h1.get_text()) 

Wenn Sie vorhaben, für jeden Standort Benutzer zur Eingabe aufzufordern, dann kann es auf diese Weise

from bs4 import BeautifulSoup 
import requests 
import pprint 
import re 
import pyperclip 

urls = ['www.website1.com', 'www.website2.com', 'www.website3.com', .....] 
#scrape elements 
msg = 'Enter Url, to exit type q and hit enter.' 
url = input(msg) 
while(url!='q'): 
    response = requests.get(url) 
    soup = BeautifulSoup(response.content, "html.parser") 

    #print titles only 
    h1 = soup.find("h1", class_= "class-headline") 
    print(h1.get_text()) 
    input(msg) 
+0

ich diesen Fehler: Traceback (jüngste Aufforderung zuletzt): File "/Users/Computer/Desktop/test.py", Zeile 7, in Urls = Eingang [ 'https: //website.com/link1','https://website.com/link2 '] TypeError:' builtin_function_or_method'-Objekt ist nicht unterscheidbar –

+0

Werden Sie die Eingabe jeder URL vom Benutzer nehmen? Wenn nein, dann lege einfach alle URLs in die Liste, wie in meiner Antwort gezeigt. Setzen Sie die Liste nicht in die Eingabemethode. – falloutcoder

+0

Ich dachte an Eingabe von Benutzer getrennt durch Zeilen? –

1

Wenn Sie Links in Chargen kratzen wollen erfolgen. Geben Sie eine Stapelgröße an und durchlaufen Sie sie.

from bs4 import BeautifulSoup 
import requests 
import pprint 
import re 
import pyperclip 

batch_size = 5 
urllist = ["url1", "url2", "url3", .....] 
url_chunks = [urllist[x:x+batch_size] for x in xrange(0, len(urllist), batch_size)] 

def scrape_url(url): 
    response = requests.get(url) 
    soup = BeautifulSoup(response.content, "html.parser") 
    h1 = soup.find("h1", class_= "class-headline") 
    return (h1.get_text()) 

def scrape_batch(url_chunk): 
    chunk_resp = [] 
    for url in url_chunk: 
     chunk_resp.append(scrape_url(url)) 
    return chunk_resp 

for url_chunk in url_chunks: 
    print scrape_batch(url_chunk) 
+0

Wenn ich die Anfragen in Abständen von 10 auf jede URL setzen wollte, wie könnte ich das tun? Und ich kenne die URL-Chunks nicht, wozu dienen sie? – ColeWorld

+0

Um die Zeit für den Import der Anfragen zu teilen, verwenden Sie time.sleep (10) in der Funktion scrape_url. url_chunks ist eine Variable, die eine Python-Liste ist, die eine Liste von URLs enthält. für zB: [['www.website1.com', 'www.website2.com'], ['www.website3.com', 'www.website3.com']] –

Verwandte Themen