Цикл по тегу - BeautifulSoup - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь получить заголовок темы с веб-страницы в моем скрипте, но он только вытаскивает последний объект на странице и добавляет его к каждой записи в моем файле JSON. Как заставить его циклически проходить по каждому из тегов h2, чтобы добавить правильный предмет к каждой записи?

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import json

uci_urls = ['http://ocw.uci.edu/courses']

data =[]
#opening up connection and grabbing page
for uci_url in uci_urls:
    uClient = urlopen(uci_url)
    page_html = uClient.read()
    uClient.close()

    #html parsing
    page_soup = soup(page_html, "html.parser")

    #grabs info for each textbook
    containers = page_soup.findAll("div",{"class":"panel-heading"})
    subjects = page_soup.findAll("h2")

    for container in containers:
        item = {}
        item['type'] = "Course"
        item['title'] = container.h3.text
        item['author'] = "University of California Irvine"
        item['link'] = "http://ocw.uci.edu/courses" + container.a["href"]
        item['source'] = "UCI Open"
        for subject in subjects:
           item['subject'] = subject.text
        item['base_url'] = "http://ocw.uci.edu/"
        data.append(item) # add the item to the list

    with open("./json/uci.json", "w") as writeJSON:
       json.dump(data, writeJSON, ensure_ascii=False)

1 Ответ

0 голосов
/ 13 мая 2018

Получение всех заголовков со страницы не может помочь.Вы должны получить каждый родительский div, содержащий как нужный заголовок, так и панели курса.

#html parsing
page_soup = soup(page_html, "html.parser")

for tab_pane in page_soup.select('.col-sm-9.col-md-9.tab-content > .tab-pane'):
    subject = tab_pane.h2.text
    for container in tab_pane.findAll("div",{"class":"panel-heading"}):
        item = {}
        item['type'] = "Course"
        item['title'] = container.h3.text
        item['author'] = "University of California Irvine"
        item['link'] = "http://ocw.uci.edu/courses" + container.a["href"]
        item['source'] = "UCI Open"
        item['subject'] = subject
        item['base_url'] = "http://ocw.uci.edu/"
        data.append(item) # add the item to the list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...