파이썬 크롤링에서의 for 관련 질문드립니다.
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import os
import requests
from selenium import webdriver
import csv
driver = webdriver.Chrome('C:/rrr/chromedriver.exe')baseurl = 'https://www.sbs.co.kr/schedule/index.html?type=dmb&channel=DMB+TV&pmDate='plusurl = input("날짜입력(ex:20200815):")url = baseurl + urllib.parse.quote_plus(plusurl) driver.get(url)
html = driver.page_sourcesoup = BeautifulSoup(html)
#--------------select일경우------------------
try:
for i in range(50):
time1 = soup.select('.spthours')[i].text
time2 = soup.select('.spthours')[i+1].text
title1 = soup.select('.spititle')[i].text
print(time1, time2, title1, '-1,-1', sep=',')
i = i + 1
except:
title1 = soup.select('.spititle')[i].text
print(time2, title1, '-1,-1', sep=',')
--------------------------------------------------------------------------------------------------
이전에 이어서 질문드립니다.
답변달아주신 분들 덕분에 +3지식과 문제가 해결되에 뒤에 주르륵 만들어보았습니다.
위의 코드를 돌려서 바로 csv파일을 만들 계획이긴 한데,
요지는 for i in range(50): 부분입니다.
크롤링할때 매일 시간,편성부분이 매번 달라지는데, 'in soup : '로 썼다간 에러가 뜨더군요...ㅠ
그래서 넉넉하게 범위 50으로 적긴했는데, in 뒤에 적절하게 들어갈만한 변수가 있을까요??
안녕하세요,
soup.select('.spthours')의 개수를 이용하시는게 좋아 보입니다.
spthours = soup.select('.spthours') for idx in range(len(spthours) - 1): time1 = spthours[idx].text time2 = spthours[idx+1].text위와 같은 방식으로 코드를 짜시면 될 것 같습니다.
감사합니다.
개발 컴퓨터가 아니다보니 개발 환경이 안되어 있어 정확하게는 못돌려보았지만 range(50) 인 코드는 좋아보이지 않습니다.
아래와 같이 변경하는게 어떻까 합니다.
우선 코드를 못돌려보다보니 정확하지는 않을 수 있습니다.
select자체가 1개가 있어도 배열을 리턴하게 되어 있습니다.
배열은 length라는 길이를 가진 값이 있으니 길이 만큼 for문을 돌리는것이 좋아보입니다.
hours_tags = soup.select('.spthours') for i in hours_tags.length: time1 = hours_tags[i].textSBS방송쪽 클로링 하는 질문을 봤던것 같습니다.
json이 날라오는데 이렇게 크롤링 해야할 이유가 있을까 합니다.
url = "https://static.cloud.sbs.co.kr/schedule/2020/9/8/DMB+TV.json?_=1599496474274" jsonData = requests.get(url).json() for program in jsonData.length: start_time = program.start_time title = program.title이런식으로 하는게 코드가 더 깔끔해보이기는 합니다.
간단히 작성해서 올려드립니다.
import urllib.parse from bs4 import BeautifulSoup import os import requests from selenium import webdriver driver = webdriver.Chrome() baseurl = 'https://www.sbs.co.kr/schedule/index.html?type=dmb&channel=DMB+TV&pmDate=' plusurl = input("날짜입력(ex:20200815):") url = baseurl + urllib.parse.quote_plus(plusurl) driver.get(url) html = driver.page_source soup = BeautifulSoup(html) for i in range(len(soup.findAll('strong', attrs={'class': 'spt_hours'}))): #spt_hours를 개수를 찾으시면 됩니다. time1 = soup.select('.spt_hours')[i].text #spthours가 아니라 spt_hours로 해주셔야 됩니다. time2 = soup.select('.spt_hours')[i+1].text # title1 = soup.select('.spi_title')[i].text # print(time1, time2, title1, '-1,-1', sep=',')