2016-06-01 6 views
0

Я в настоящее время работает следующий код:Определение списка URL для искателя синтаксис выдает

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) 

Ошибки:

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 

Я думаю, у меня возникают проблемы с href = urljoin(base, (a["href"] for a in cont)) части, как я m пытается создать список URL-адресов. Я могу подать в get_hltv_match_data, чтобы затем захватить различные элементы на этой странице. Я собираюсь сделать это неправильно?

Приветствие

ответ

0

Вы должны присоединиться каждый HREF в соответствии с вашими комментариями,:

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

Вы пытаетесь присоединиться к базовой URL к generator(a["href"] for a in cont) который т.е. не имеет никакого смысла.

Вы также должны передавать URL-адрес на запросы, или вы будете снова и снова запрашивать одну и ту же страницу.

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