Мой код работает в двух частях
Открывает браузер с селеном и добавляет детали, чтобы получить результаты со страницы
Разберите 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
Нет необходимости повторно запрашивать обновленный 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,
Вы должны создать новое рабочее пространство и попробовать мой код, потому что он отлично работает в моей системе. Я использую ubuntu18.04 и браузер Chrome.
Запустите свой код прямо в терминале. Работал как шарм! лучше, чем Pycharm :) Большое спасибо! Потратил на это ночь, как идиот.
@Pierre Carvalho принимает мой ответ, если он решил вашу проблему.
вы не должны использовать сон. вместо этого используйте явное ожидание (WebDriverWait).
Спасибо за предложение, мистер Голдберг. Это потому, что он лучше обрабатывает ошибки и контролирует ожидание определенных элементов?
Большое спасибо. Я попробовал ваш код, но файла csv все еще нет. Кажется, я что-то напутал в своей машине. Какие-либо предложения?