웹 사이트는 get 요청 (클라이언트 측에서 비동기 적으로 처리됨)없이 두 개의 날짜 필터 (연도/주)를 사용하여 동적으로 내용을 변경합니다. 각 필터 옵션은 추출하려는 td 요소가있는 다른 page_source를 생성합니다.중첩 for 루프 문제로 고생
현재 중첩 목록 for-loop를 사용하여 필터를 반복합니다 (다른 td 요소를 포함하는 다른 페이지 소스, 각 페이지 소스의 내용을 반복 한 다음 빈 목록에 원하는 td 요소를 추가합니다). .
store = []
def getData():
year = ['2015','2014']
for y in year:
values = y
yearid = Select(browser.find_element_by_id('yearid'))
fsid.select_by_value(values)
weeks = ['1', '2']
for w in weeks:
value = w
frange = Select(browser.find_element_by_id('frange'))
frange.select_by_value('WEEKS')
selectElement = Select(browser.find_element_by_id('fweek'))
selectElement.select_by_value(value)
pressFilter = browser.find_element_by_name('submit')
pressFilter.submit()
#scrape data from page source
html = browser.page_source
soup = BeautifulSoup(html, "lxml")
for el in soup.find_all('td'):
store.append(el.get_text())
지금까지 너무 좋아, 나는 내가 좋아하는 모든 TD 요소의 단일 목록을 구성 루프를 가지고있다. 대신
, 나는 들어, 하나를 별도의 목록을 저장하고 싶습니다 각 페이지 소스 (즉, 필터 조합 당 하나) 목록의 목록. 나는 사실을 할 수있는 두 번째 단계에서 즉 내가 cou 그런 다음 일부 기준에 따라 목록에서 항목을 추출합니다.
그러나 원래 추가 시점에서 할 수 있습니까? 뭔가 ...
store = [[],[], [], []]
...
counter = 0
for el in soup.find_all('td'):
store[counter].append(el.get_text())
counter = counter +1
이것은 저장소 목록의 첫 번째 개체에만 추가되기 때문에 적합하지 않습니다. 카운터를 td for-loop에 넣으면 td 요소가 반복 될 때마다 증가 할 것입니다. 실제로는 특정 페이지 소스를 반복 할 때만 증가 시키길 원할 때입니다 (자체적으로 반복입니다). 필터 조합의).
나는 혼란 스럽다. 나는 심지어 무엇을하려고 노력하고 있는가? 그렇다면 카운터를 어디에 두어야합니까? 아니면 다른 기술을 사용해야합니까?
나는 귀하의 질문에 어떤 지능형리스트를 볼 수 없습니다. (정규 루프를 사용하는) 현재 코드의 경우, 필터 조합마다 새로운 목록 객체를 만들고 추가하고 모든 새로운 'td' 텍스트 결과를 새 목록에 추가하십시오 :'perfilter = []','store.append (perfilter) '와'find_all()'루프에서 :'perfilter.append (el.get_text())'. –
목록 이해력에 대한 참조를 수정했습니다. – abc