Python не создает CSV-файл после синтаксического анализа - с использованием селена и BeautifulSoup - PullRequest
0 голосов
/ 31 мая 2019

Мой код работает на две части

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

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

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

Вещи, которые я использовал, чтобы написать это - Ubuntu Mate 18.04 Редактор Pycharm Браузер Firefox

Я напечатал каждый уровень кода и получил правильный вывод. Однако выход останавливается после цикла 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

1 Ответ

0 голосов
/ 31 мая 2019

Нет необходимости повторно запрашивать обновленный 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,
...