2016-06-01 21 views
0

ich zur Zeit bin mit dem folgenden Code:definieren URL-Liste für Crawler, Syntax gibt

import requests 
from bs4 import BeautifulSoup 
from urlparse import urljoin 

def hltv_match_list(max_offset): 
    offset = 0 
    while offset < max_offset: 
     url = 'http://www.hltv.org/?pageid=188&offset=' + str(offset) 
     base = "http://www.hltv.org/" 
     soup = BeautifulSoup(requests.get("http://www.hltv.org/?pageid=188&offset=0").content, 'html.parser') 
     cont = soup.select("div.covMainBoxContent a[href*=matchid=]") 
     href = urljoin(base, (a["href"] for a in cont)) 
     # print([urljoin(base, a["href"]) for a in cont]) 
     get_hltv_match_data(href) 
     offset += 50 

def get_hltv_match_data(matchid_url): 
    source_code = requests.get(matchid_url) 
    plain_text = source_code.text 
    soup = BeautifulSoup(plain_text, 'html.parser') 
    for teamid in soup.findAll("div.covSmallHeadline a[href*=teamid=]"): 
     print teamid.string 

hltv_match_list(5) 

Fehler:

File "C:/Users/mdupo/PycharmProjects/HLTVCrawler/Crawler.py", line 12, in hltv_match_list 
    href = urljoin(base, (a["href"] for a in cont)) 
    File "C:\Python27\lib\urlparse.py", line 261, in urljoin 
    urlparse(url, bscheme, allow_fragments) 
    File "C:\Python27\lib\urlparse.py", line 143, in urlparse 
    tuple = urlsplit(url, scheme, allow_fragments) 
    File "C:\Python27\lib\urlparse.py", line 182, in urlsplit 
    i = url.find(':') 
AttributeError: 'generator' object has no attribute 'find' 

Process finished with exit code 1 

Ich glaube, ich bin mit dem href = urljoin(base, (a["href"] for a in cont)) Teil Probleme, wie ich Ich versuche, eine URL-Liste zu erstellen, die ich in get_hltv_match_data einspeisen kann, um dann verschiedene Elemente auf dieser Seite zu erfassen. Gehe ich falsch herum?

Prost

Antwort

0

Sie müssen jede href wie pro Ihre kommentierten Code beitreten:

urls = [urljoin(base,a["href"]) for a in cont] 

Sie versuchen die Basis-URL zu einem generator d.h (a["href"] for a in cont) zu verbinden, die keinen Sinn macht.

Sie sollten auch die URL an Anfragen weitergeben, oder Sie werden die gleiche Seite immer wieder anfordern.

soup = BeautifulSoup(requests.get(url).content, 'html.parser')