Ответы пользователя по тегу Парсинг
  • Как спарсить содержимое скрипта с помощью python?

    from bs4 import BeautifulSoup
    import json
    
    html = "<script nonce="GxP4ZZHL0G9c7ogwBCw4pwaT">
        // Здесь находится json 
    </script>"
    
    soup = BeautifulSoup(hmtl, parser="lxml")
    raw = soup.find("script").get_text().strip()
    
    data = json.loads(raw)


    Но можно и без bs4)))
    Ответ написан
    Комментировать
  • Как спарсить подкатегории?

    Виктор Кокорич, здравствуйте!
    По числу похожих постов можно предположить, что Вы, как и остальные, где-то учитесь и решаете учебную задачу.
    Вот похожий пост.
    Спарсить подкатегории можно несколькими способами. Например, получить список страниц с категориями и обойти эти страницы парсером.
    import requests
    from bs4 import BeautifulSoup
    from pprint import pprint
    
    
    url = 'http://www.zagrya.ru/'
    headers = {
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9/',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        }
    
    html = requests.get(url, headers=headers)
    soup = BeautifulSoup(html.content)
    
    
    # словарь, в который записываются НАЗВАНИЯ всех категорий на сайте и ССЫЛКИ на них
    categories = {}
    
    for cat in soup.find_all('a', {"class": "hor-menu__lnk"}):
        name = cat.find("span", {"class":"hor-menu__text"}).get_text()
        url = "http://www.zagrya.ru" + cat.attrs['href']
        
        categories[name] = url
    
    print(categories)
    # {
    # 'НОВИНКИ': 'http://www.zagrya.ru/category/category_2578/', 
    # 'КНИГИ': 'http://www.zagrya.ru/category/knigi/', 
    # 'ИГРУШКИ': 'http://www.zagrya.ru/category/igrushki/', 
    # 'КАНЦТОВАРЫ': 'http://www.zagrya.ru/category/category_2639/', 
    # 'УЧЕБНАЯ ЛИТЕРАТУРА': 'http://www.zagrya.ru/category/uchyebnaya-lityeratura/', 
    # 'ЭНЦИКЛОПЕДИИ': 'http://www.zagrya.ru/category/entsiklopyedii/', 
    # 'РАСПРОДАЖА': 'http://www.zagrya.ru/category/rasprodazha_1/'
    # }
    
    
    # словарь, в который записываются НАЗВАНИЯ всех категорий и их ПОДКАТЕГОРИИ
    subcategories = {}
    
    for k, v in categories.items():
        # перебираем все ссылки/переходим по ним
        html = requests.get(v, headers=headers)
        soup = BeautifulSoup(html.content)
    
        sub_list = []
        for subcat in soup.find_all("div", {"class": "subcat-wrapper__item sub-cat-nobd"}):
            sub_list.append(subcat.find("div", {"class": "sub-cat__title"}).get_text())
        subcategories[k] = sub_list
    
    
    # вывод на экран
    for k,v in subcategories.items():
        print(k)
        pprint(v)
    
    # Грошь - цена Вам, как специалисту, если Вы самостоятельно не разберётесь
    # с тэгами и работай библиотек Requests и BeautifulSoup
    Ответ написан
    1 комментарий
  • Парсер выдает none?

    Gorin43, здравствуйте!
    У Вас много ошибок в коде:
    import requests
    from bs4 import BeautifulSoup
    
    
    url = 'http://www.zagrya.ru/'
    headers = {
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9/',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
        }
    
    
    def get_html(url):
        r = requests.get(url, headers=headers)
        return r
    
    
    def get_content(html):
        soup = BeautifulSoup(html.content)
        items = soup.find_all('li', {"class": "hor-menu__item has-subm"})
        tovari = []
        category = {}
    
        for item in items:
            tovari.append(item.find('a', {'class':'hor-menu__lnk'}).find('span', {'class':'hor-menu__text'}).get_text())
        
        category['karegorii'] = tovari
        return category
    
    html = get_html(URL)
    print(get_content(html))
    Ответ написан
    Комментировать
  • Почему вместо выгрузки данных выдает пустой список?

    Виктор Кокорич доброго времени суток!
    возможно проблема в этой строке:

    otzivi.extend(get_content(html.text))

    - в функции get_content()
    - может правильно так html.get_text()?
    Ответ написан
    Комментировать
  • Как вывести текст при парсинге?

    hoogierain
    # если такой класс встречается в html-коде только ОДИН раз, то код такой:
    soup = BeautifulSoup(resp, 'html.parser')
    appeals = soup.find('span', {'class': 'tlid-translation translation'}).get_text().strip()
    bot.send_message(message.chat.id, appeals)
    
    # если НЕСКОЛЬКО раз, то код такой:
    soup = BeautifulSoup(resp, 'html.parser')
    appeals = [s.get_text().strip() for s in soup.find_all('span', {'class': 'tlid-translation translation'})]
    for app in appeals:
    	bot.send_message(message.chat.id, app)
    Ответ написан
    Комментировать
  • Отсутствует необходимое пространство-имен в angle-sharp, почему?

    CityzenUNDEAD, доброго времени суток!
    Может документация поможет?

    UPD:
    using AngleSharp.Html.Dom; // вот так вроде бы правильно
    Ответ написан
    Комментировать
  • Как парсить строки с помощью Python?

    A1K0, добро пожаловать в дивный мир распарсивания адресов)
    Это "кроличья нора".
    В идеале адреса в базу данных должны писаться через справочники (КЛАДР, ФИАС): выбираешь из словаря город, потом улицу и т.д.
    Если же у тебя адрес зашит в одну строку, в одно текстовое поле в БД, то пользователи могут писать адрес всевозможными способами. Часто имеют место ошибки в написании улиц, использование черточек, дефисов, дробей, запятых, точек с запятой. Если база содержит сотни тысяч записей, то выверить все ошибки будет очень долго и муторно.
    Если адрес строго формализован, то проблем почти нет. Парсишь через разделитель.
    Но перед этим советую посчитать число этих разделителей в каждой строке. Может оказаться так, что у тебя в одну запись попали два адреса (регистрации и фактического проживания).
    list_address = ["Киевская обл. , г. Киев, ул. Крещатик, дом 10, кв. 8",
                    "Киевская обл. , г. Киев, ул. Крещатик, 2, 12",
                    "Киевская обл. , г. Киев, ул. Крещатик, д.20, кв.118",
                    "Киевская обл. ; Киев; Крещатик; 50-8",
                    "Киевская обл. , г. Киев, пл. Незалежности, д.12-а, строение 3, помещение 8, офис. 33",]
    
    
    for adr in list_address:
        # допустим разделитель запятая
        # и корректный адрес должен состоять из 5 частей
        region, city, street, house, flat = "", "", "", "", "",
        if adr.count(",") == 4:
            adr = adr.split(",")
            region = adr[0]
            city = adr[1]
            street = adr[2]
            house = adr[3]
            flat = adr[4]
        print(region, city, street, house, flat)
    
    # распарсятся три адреса и пяти:
    # Киевская обл.   г. Киев  ул. Крещатик  дом 10  кв. 8
    # Киевская обл.   г. Киев  ул. Крещатик  2  12
    # Киевская обл.   г. Киев  ул. Крещатик  д.20  кв.118
    Ответ написан
    Комментировать
  • Как написать парсер в который вы вводите данные?

    Joulence мысль такая:
    import requests
    from bs4 import BeautifulSoup
    
    url1 = 'https://vstup.osvita.ua/y2020/r27/82/706500/'
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
    cs = requests.get(url1, headers=headers)
    
    # допустим фамилия вот такая
    lname = "Сокол"
    
    soup = BeautifulSoup(cs.content, 'html.parser')
    table = soup.find("table", {"class": "rwd-table"})
    
    list_family = []
    for tr in table.find_all("tr", {"class": "rstatus6"}):
        for td in tr.find_all("td"):
            if td["data-th"] == "ПІБ":
                list_family.append(td.get_text())
    # print(list_family)
    # print()
    
    result = []
    for family in list_family:
        # print(family)
        print(family.lower().split(" ")[0])
        if lname.lower() in family.lower().split(" ")[0]:
            print("ok")
            result.append(family)
    
    print("=="*30)
    if len(result) > 0:
        print(result)
    else:
        print("Такой абитуриент не найден")
    Ответ написан
    Комментировать