2015-01-31 5 views
1

Итак, я использую BeautifulSoup для создания веб-скипа для захвата каждого объявления на странице Craigslist. Вот что у меня до сих пор:BeautifulSoup: проблема с find_all() и unicode?

import requests 
from bs4 import BeautifulSoup, SoupStrainer 
import bs4 

page = "http://miami.craigslist.org/search/roo?query=brickell" 
search_html = requests.get(page).text 

roomSoup = BeautifulSoup(search_html, "html.parser") 

ad_list = roomSoup.find_all("a", {"class":"hdrlnk"}) 
#print ad_list 
ad_ls = [item["href"] for item in ad_list] 
#print ad_ls 
ad_urls = ["miami.craigslist.org" + ad for ad in ad_ls] 
#print ad_urls 
url_str = [str(unicode) for unicode in ad_urls] 

# What's in url_str? 
for url in url_str: 
    print url 

Когда я запускаю это, я получаю:

miami.craigslist.org/mdc/roo/4870912192.html miami.craigslist.org/ MDC/РОО/4858122981.html miami.craigslist.org/mdc/roo/4870665175.html miami.craigslist.org/mdc/roo/4857247075.html miami.craigslist.org/mdc/roo/4870540048.html. ..

Это точно я хочу: список, содержащий URL-адреса для каждого объявления на странице.

Следующим шагом было извлечь что-то с каждой из этих страниц; следовательно, создавая еще один объект BeautifulSoup. Но я не могу остановиться:

for url in url_str: 
    ad_html = requests.get(str(url)).text 

Здесь мы, наконец, дойдём до моего вопроса: что это за ошибка? Единственное, что я могу понять это последние 2 строки:

Traceback (most recent call last): File "webscraping.py", line 24, 
in <module> 
    ad_html = requests.get(str(url)).text File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", 
line 65, in get 
    return request('get', url, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py", 
line 49, in request 
    response = session.request(method=method, url=url, **kwargs) File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", 
line 447, in request 
    prep = self.prepare_request(req) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/sessions.py", 
line 378, in prepare_request 
    hooks=merge_hooks(request.hooks, self.hooks), File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", 
line 303, in prepare 
    self.prepare_url(url, params) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/models.py", 
line 360, in prepare_url 
    "Perhaps you meant http://{0}?".format(url)) requests.exceptions.MissingSchema: Invalid URL 
u'miami.craigslist.org/mdc/roo/4870912192.html': No schema supplied. 
Perhaps you meant http://miami.craigslist.org/mdc/roo/4870912192.html? 

Похоже, вопрос в том, что все мои ссылки предшествует и», так requests.get() не работает. Вот почему вы видите меня в значительной степени, пытаясь заставить все URL-адреса в регулярную строку с помощью str(). Однако, независимо от того, что я делаю, я получаю эту ошибку. Есть что-то еще, что мне не хватает? Я полностью недопонимаю свою проблему?

Большое спасибо!

ответ

1

Похоже, вы misundersood неполадку

Сообщение:

u'miami.craigslist.org/mdc/roo/4870912192.html': No schema supplied. 
Perhaps you meant http://miami.craigslist.org/mdc/roo/4870912192.html? 

означает, что недостатки http:// (схиму) перед URL

так заменяющего

ad_urls = ["miami.craigslist.org" + ad for ad in ad_ls] 

по

ad_urls = ["http://miami.craigslist.org" + ad for ad in ad_ls] 

должно делать работу

+0

Это сделало трюк. Я совершенно не замечал этого. Благодаря! –