Зачистка нескольких URL на Kickstarter с помощью Beautifulsoup - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь собрать с сайта кикстартера данные о количестве спонсоров для каждой категории наград за каждый проект. Мой вывод - это список URL.

Я столкнулся с рядом проблем:

  1. Я не могу загрузить URL-адрес из txt-файла, но мой код работает, только если список в Python.

    Пример данных, которые я пытаюсь очистить:

    ..... ..... , Залог CA $ 500 или более Около 325 евро , Залог CA $ 2500 или более Около 1 625 евро , 5 покровителей , 2 покровителя , ........ .......

  2. Мне нужно записать результаты, показанные выше, в строку файла CSV для каждого проекта. Таким образом, первой ячейкой файла CSV будет ссылка на проект (или заголовок, если он очищен с Beautifulsoup); второй столбец должен быть серией значений, которые состоят из числа спонсоров для каждого предложения. Пример с использованием данных выше:

"project link" , "pledge__backer-count" 5 backers , "pledge__amount" $500

Я борюсь с той частью кода, которая идет из списка URL-адресов. Первая часть скопирована из примера в Интернете и работает хорошо. Заранее спасибо за помощь, мне очень нужно это для моей диссертации. "" "

from requests import get
from requests.exceptions import RequestException
from contextlib import closing
from bs4 import BeautifulSoup
import re

def simple_get(url):
    """
    Attempts to get the content at `url` by making an HTTP GET request.
    If the content-type of response is some kind of HTML/XML, return the
    text content, otherwise return None
    """
    try:
        with closing(get(url, stream=True)) as resp:
            if is_good_response(resp):
                return resp.content
            else:
                return None

    except RequestException as e:
        log_error('Error during requests to {0} : {1}'.format(url, str(e)))
        return None

def is_good_response(resp):
    """
    Returns true if the response seems to be HTML, false otherwise
    """
    content_type = resp.headers['Content-Type'].lower()
    return (resp.status_code == 200 
            and content_type is not None 
            and content_type.find('html') > -1)

def log_error(e):
    """
    It is always a good idea to log errors. 
    This function just prints them, but you can
    make it do anything.
    """
    print(e)



urls=['https://www.kickstarter.com/projects/socialismmovie/socialism-an-american-story?ref=home_potd','https://www.kickstarter.com/projects/1653847368/the-cuban-a-film-about-the-power-of-music-over-alz?ref=home_new_and_noteworthy']


for url in urls:
        Project_raw=simple_get(url)
        Project_bs4= BeautifulSoup(Project_raw, 'lxml')

        Backers_offers=Project_bs4.find_all("h2", class_="pledge__amount")
        Backers_per_offer=Project_bs4.find_all("span", class_="pledge__backer-count")
        Offers_plus_Backers=Backers_offers+Backers_per_offer

        print(Offers_plus_Backers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...