• Как отправить html страницу чтобы она отображалась в браузере при помощи библиотеки socket?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Браузеры общаются с web-серверами по протоколу HTTP, соответственно вам надо изучить, как он работает, прочитать из сокета http-запрос от браузера, разобрать его и отправить http-ответ, содержащий текст этой страницы.
    Ответ написан
    Комментировать
  • Написал парсер автомобилей, но выдает какие-то не понятные символы, как от них избавиться?

    @alekssamos
    Программист любитель
    Значит смотри. Это "неразрывный пробел" №160 (0xa0).
    Так вот.
    Можешь сделать так: .text.strip().replace(chr(160), " ")
    Если тебе нужна форматированная человеко читаемая строка

    и в начале import re
    и в словаре
    int(re.sub(r"[^\d]+", "", item.find("div", class_ = "css-1dv8s3l eyvqki91").text))

    если тебе нужно именно int число.
    Ответ написан
    Комментировать
  • Написал парсер автомобилей, но выдает какие-то не понятные символы, как от них избавиться?

    @AVKor
    Я так понимаю, надо с записью в CSV-файл?
    import csv
    import unicodedata
    import requests
    from anti_useragent import UserAgent
    from bs4 import BeautifulSoup
    
    ua = UserAgent()
    headers = {'User-Agent': ua.chrome}
    
    
    def get_html(url):
        response = requests.get(url, headers=headers)
        return response.text
    
    
    def get_content(html):
        soup = BeautifulSoup(html, 'lxml')
        items = soup.find_all('a', class_='css-yo21t ewrty961')
        cars = []
        for item in items:
            cars.append({
                'Title': item.find('div', class_='css-17lk78h e3f4v4l2').text.strip(),
                'Price': unicodedata.normalize("NFKD", item.find('div', class_='css-1dv8s3l eyvqki91').text.strip()),
                'About': item.find('div', class_='css-1fe6w6s e162wx9x0').text.strip()
            })
        return cars
    
    
    def content_to_csv(content):
        columns = ['Title', 'Price', 'About']
        result_file = 'autodrom.csv'
        try:
            with open(result_file, 'w', encoding='utf-8', newline='') as csv_file:
                writer = csv.DictWriter(csv_file, fieldnames=columns, dialect='unix')
                writer.writeheader()
                for item in content:
                    writer.writerow(item)
        except IOError as err:
            print(f'Error writing the file {result_file}: {err}')
    
    
    def main():
        url = 'https://auto.drom.ru/audi/'
        content_to_csv(get_content(get_html(url)))
    
    
    if __name__ == '__main__':
        main()
    Ответ написан
    Комментировать
  • Почему выдает ошибку при парсинге "TypeError: find() takes no keyword arguments"? Как исправить это?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    roomlist у тебя <class 'bs4.element.Tag'>
    Читай доки

    Измененный пример

    import requests
    from bs4 import BeautifulSoup
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0"}
    url = "https://hamptonvolgograd.ru/nomera/"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    roomlist = soup.findAll("span", class_="h1")
    
    for hostel in roomlist:
        print(hostel.text.strip())

    вывод
    Номер с двуспальной кроватью (номер первой категории)
    Номер с двумя кроватями (номер первой категории)
    Номер с двуспальной кроватью и диваном-кроватью (Джуниор сюит)
    Номер для людей с ограниченными возможностями (номер первой категории)

    Ответ написан
    2 комментария