【问题标题】:Python not creating csv file after parsing - using selenium and beautifulsoupPython在解析后不创建csv文件-使用selenium和beautifulsoup
【发布时间】:2019-05-31 07:33:37
【问题描述】:

我的代码分为两部分

  1. 使用 selenium 打开浏览器并添加详细信息以从页面获取结果

  2. 解析结果页面的 html 并将其写入 csv 文件。

问题 第二部分仅在我下载页面并手动添加本地 url(在我的计算机上)时才有效。如果我添加代码的第一部分,selenium 会打开浏览器,但不会导出 csv 文件。

我用来写这个的东西 - Ubuntu 伴侣 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 selenium web-scraping beautifulsoup export-to-csv


    【解决方案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 文件仍然不存在。我想我在我的机器上搞砸了一些东西。有什么建议吗?
    • 您应该创建一个新工作区并尝试我的代码,因为它在我的系统上运行良好。我正在使用 ubuntu18.04 和 chrome 浏览器。
    • 直接在终端运行你的代码。像魅力一样工作!比 Pycharm 更好:) 非常感谢!像个白痴一样花了一个晚上。
    • @Pierre Carvalho 接受我的回答,如果它解决了您的问题。
    • 你不应该使用睡眠。改为使用显式等待 (WebDriverWait)。
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2018-05-11
    • 2022-01-26
    • 2019-05-19
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多