python
  • html
  • python-3.x
  • web-scraping
  • beautifulsoup
  • 2017-01-02 13 views 0 likes 
    0

    Я использую Python 3.6 и PyCharm 2016.2 в качестве редактораползать пару тегов из HTML

    Я хотел бы ползать пары содержимого внутри «й»: теги «ТДА» если «TD» тег имеет дочерний тег, который является входным тегом с "checked = 'chedcked'". Я попробовал regEx, find_all от BeautifulSoup и других, но все еще имею сообщения об ошибках.

    Пожалуйста, помогите.

    Это адрес веб-сайта: http://www.bobaedream.co.kr/mycar/popup/mycarChart_4.php?zone=C&cno=652691&tbl=cyber

    Ниже мой код:

    from bs4 import BeautifulSoup 
    import urllib.request 
    from urllib.parse import urlparse 
    import re 
    
    popup_inspection = "http://www.bobaedream.co.kr/mycar/popup/mycarChart_4.php?zone=C&cno=652691&tbl=cyber" 
    res = urllib.request.urlopen(popup_inspection) 
    html = res.read() 
    soup_inspection = BeautifulSoup(html, 'html.parser') 
    
    insp_trs = soup_inspection.find_all('tr') 
    for insp_tr in insp_trs: 
        # print(insp_td.text) 
        th = insp_tr.find('th') 
        td = insp_tr.find('td') 
    
        if td.find('input', checked=''): 
         print(th, ":", td) 
        else: pass 
    
    +0

    Пожалуйста, сообщите об ошибке. Если мы не знаем, что такое ошибка, мы не можем помочь вам исправить это. – DyZ

    ответ

    1

    Идея заключается в том, чтобы использовать searching function, чтобы найти th элементы, за которыми следует td собрата. Затем мы можем найти элемент input с type="radio" и указать атрибут checked. Если он есть, мы можем найти элемент label, который появится сразу после радио input.

    Пример реализации:

    import requests 
    from bs4 import BeautifulSoup 
    
    
    url = "http://www.bobaedream.co.kr/mycar/popup/mycarChart_4.php?zone=C&cno=652691&tbl=cyber" 
    with requests.Session() as session: 
        session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'} 
    
        page = session.get(url) 
        soup = BeautifulSoup(page.content, "html.parser") 
    
        for label in soup.find_all(lambda tag: tag.name == "th" and tag.find_next_sibling('td')): 
         value_cell = label.find_next_sibling('td') 
    
         # if combobox cell 
         selected_value = value_cell.find("input", type="radio", checked=True) 
         if selected_value: 
          value = selected_value.find_next("label").get_text() 
          print(label.get_text(), value) 
    

    В настоящее время печатает:

    10. 보증유형 자가보증 
    13. 사고/침수유무(단순수리제외) 무 
    12. 불법구조변경 없음 
    

    Это, конечно, может и должна быть улучшена, но я надеюсь, что методы, используемые в фрагменте кода поможет вам добраться до окончательное решение.

    +0

    Я глубоко оценил ваш комментарий. Я попытался с вашим кодом, но он продолжает возвращать содержимое из первой таблицы, исключая остальные таблицы. Я проверил остальные таблицы с аналогичным расположением тегов, например («input», type = «radio», checked = True), но результат не может их вернуть. Вы знаете, почему это произошло случайно? –

    +0

    Я даже добавил этот код в начале кода (для insp_table в soup_inspection.find_all ('table', class_ = True) :) –

    +0

    @ 신종원 выглядит так: 'checked = True' не работает для других случаев - вход элементов там нет атрибута 'checked' .thanks. – alecxe

    Смежные вопросы