Python не создает CSV-файл после разбора — с использованием селена и красивого супа

Мой код работает в двух частях

  1. Открывает браузер с селеном и добавляет детали, чтобы получить результаты со страницы

  2. Разберите html страницы результатов и запишите его в CSV-файл.

Проблема Вторая часть работает только в том случае, если я загружаю страницу и вручную добавляю локальный URL-адрес (на своем компьютере). Если я добавлю первую часть кода, селен откроет браузер, но CSV-файл не будет экспортирован.

Вещи, которые я использовал, чтобы написать это - Убунту Мате 18.04 Pycharm-редактор Браузер Фаерфокс

Я напечатал каждый уровень кода и получил правильный результат. Однако вывод останавливается после цикла for.

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
import pandas as pd
import csv
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

os.environ["PATH"] += os.pathsep + r'/home/pierre/PycharmProjects/scraping/venv'
browser = webdriver.Firefox()
browser.get('http://karresults.nic.in/indexPUC_2019.asp')

reg = browser.find_element_by_id('reg')
reg.send_keys('738286')

sub = browser.find_element_by_class_name('btn-default')

sub.click()

url = browser.current_url

my_url = url

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")

results = []

for record in page_soup.findAll('tr'):
    for data in record.findAll('td'):
        results = results + [data.text.replace(u'\xa0', u'').strip()]

        print(results)

        with open('myfile.csv', 'w') as f:
            for item in results:
                f.write(item + ',')

Нет ошибок на консоли Pycharm

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет необходимости повторно запрашивать обновленный URL-адрес, вам нужно подождать пару секунд, используя модуль времени.

from bs4 import BeautifulSoup
from selenium import webdriver
import time

os.environ["PATH"] += os.pathsep + r'/home/pierre/PycharmProjects/scraping/venv'
browser = webdriver.Firefox()
browser.get('http://karresults.nic.in/indexPUC_2019.asp')

reg = browser.find_element_by_id('reg')
reg.send_keys('738286')

sub = browser.find_element_by_class_name('btn-default')

sub.click()

time.sleep(3)

soup = BeautifulSoup(browser.page_source, 'lxml')
results = []
for record in soup.find_all('tr'):
    for data in record.find_all('td'):
        results = results + [data.text.replace(u'\xa0', u'').strip()]
        with open('myfile.csv', 'w') as f:
            for item in results:
                f.write(item + ',')

CSV-файл O/P:

Name,ANIKET ANIL BALEKUNDRI,Reg. No.,738286,ENGLISH,76,,76P,HINDI,76,,76P,Part A - TOTAL,152,PHYSICS,44,30,74P,CHEMISTRY,46,30,76P,MATHEMATICS,73,,73P,BIOLOGY,55,29,84P,Part B - TOTAL,307,GRAND TOTAL MARKS,459,FINAL RESULT,First Class,

Большое спасибо. Я попробовал ваш код, но файла csv все еще нет. Кажется, я что-то напутал в своей машине. Какие-либо предложения?

Pierre Carvalho 31.05.2019 10:03

Вы должны создать новое рабочее пространство и попробовать мой код, потому что он отлично работает в моей системе. Я использую ubuntu18.04 и браузер Chrome.

bharatk 31.05.2019 10:07

Запустите свой код прямо в терминале. Работал как шарм! лучше, чем Pycharm :) Большое спасибо! Потратил на это ночь, как идиот.

Pierre Carvalho 31.05.2019 10:44

@Pierre Carvalho принимает мой ответ, если он решил вашу проблему.

bharatk 31.05.2019 10:46

вы не должны использовать сон. вместо этого используйте явное ожидание (WebDriverWait).

Corey Goldberg 31.05.2019 17:00

Спасибо за предложение, мистер Голдберг. Это потому, что он лучше обрабатывает ошибки и контролирует ожидание определенных элементов?

Pierre Carvalho 01.06.2019 13:37

Другие вопросы по теме