从html中抓取这对标签

时间:2017-01-02 02:32:18

标签: python html python-3.x web-scraping beautifulsoup

我使用python 3.6和Pycharm 2016.2作为编辑器

我想抓取" th"内的成对内容。 :" td"标签如果" td" tag有一个子标记,输入标记为" checked =' chedcked'"。我尝试了来自BeautifulSoup和其他人的regEx,find_all,但仍然有错误消息。

请帮忙。

这是网站地址:http://www.bobaedream.co.kr/mycar/popup/mycarChart_4.php?zone=C&cno=652691&tbl=cyber

以下是我的代码:

Empty Cache and Hard Reload

1 个答案:

答案 0 :(得分: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. 불법구조변경 없음

当然,这可以而且应该进一步改进,但我希望该片段中使用的技术可以帮助您找到最终的解决方案。