Это следующий вопрос к моему предыдущему вопросу о переходе через несколько веб-страниц. Я новичок в программировании ... поэтому я ценю ваше терпение и очень явные объяснения!Запись CSV-файла при циклическом перемещении по веб-страницам
Я запрограммировал цикл через многие веб-страницы. На каждой странице я хочу скопировать данные, сохранить их в переменную или файл csv (в зависимости от того, что проще/стабильнее), затем нажмите кнопку «Далее», скопируйте данные на второй странице и добавьте их в переменную или CSV файлов и т.д.
в частности, мой код выглядит следующим образом:
url="http://www.url.com"
driver = webdriver.Firefox()
driver.get(url)
(driver.page_source).encode('utf-8')
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)
wait = WebDriverWait(driver, 10)
while True:
# some code to grab the data
job_tag={'class': re.compile("job_title")}
all_jobs=soup.findAll(attrs=job_tag)
jobs=[]
for text in (all_jobs):
t=str(''.join(text.findAll(text=True)).strip())
jobs.append(t)
writer=csv.writer(open('test.csv','a', newline=''))
writer.writerows(jobs)
# click next link
try:
element=wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='reviews']/a/span[starts-with(.,'Next')]")))
element.click()
except TimeoutException:
break
Он работает без ошибок, но 1) файл собирает данные первой страницы снова и снова, но не данные последующих страниц, даже если цикл работает правильно (в конечном счете, я не имею в виду дубликаты записей, но мне нужны данные со всех страниц). Я подозреваю, что мне нужно «переопределить» суп для каждой новой страницы, я изучаю, как сделать bs4 доступ к этим URL-адресам.
2) на последней странице отсутствует «следующая» кнопка, поэтому код не добавляет данные последней страницы (я получаю эту ошибку, когда использую «w» вместо «a» в строке csv, с данными запись второй страницы в файл csv).
Кроме того, хотя это небольшая проблема, данные записываются по одной букве на ячейку в csv, хотя, когда я запускаю эту часть в Python с помощью bs4, данные правильно отформатированы. Что мне не хватает?
Спасибо!
Как устанавливаются 'jobs' и' all_jobs'? Вероятно, вам нужно сбросить переменную 'jobs' на каждую итерацию, чтобы предотвратить повторение существующих строк. – augurar
@augurar Я отредактировал сообщение, чтобы отразить, как они определены. Благодарю. –