亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在json文件中插入數據

在json文件中插入數據

慕沐林林 2022-12-14 20:39:02
代碼將錯誤的結構 json 插入到文件中import requestsfrom bs4 import BeautifulSoupfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsimport jsonurls = {}urls['Av'] = {'áa', 'Bb'}data = {}for key, value in urls.items():     for x in value:         url = 'https://www.google.pt/search?q=' + key + '%20' + x        driver = webdriver.Chrome()        driver.get(url)        html = driver.page_source        soup = BeautifulSoup(html, 'html.parser')        a = soup.find("body")        for child in a.find_all("div", {'class': 'g'}):            h2 = child.find("span", {'class': 'Q8LRLc'})            div = child.find("a", {'class': 'Fx4vi'})        data[key] = []        data[key].append({'h2': h2, 'div': div})        print(data)        with open("data_file.json", "a") as write_file:             json.dump(data, write_file, indent=4)        driver.quit()
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

我看到了很多問題,大多數是當它們應該在循環之外時卻在循環內,或者當它們應該在循環中時卻在循環之外。

  • 您在循環內設置變量h2和,但將它們添加到循環外,因此只會添加最后一個值。divfor child in a.find_all("div", {'class': 'g'}):data

  • 此外,您在循環內為每個鍵初始化數據,并且應該在循環外完成,否則每次都會重新初始化。

  • 您還每次都打開文件附加到它,我只做一次。

  • 而且,你在每個循環中初始化你的驅動程序。

  • requests并且selenium.webdriver.chrome.options.Options都是未使用的進口

所以,我會這樣改變它:

urls = {}

urls['Av'] = {'áa', 'Bb'}


data = {}

driver = webdriver.Chrome()

with open("data_file.json", "a") as write_file: 

    for key, value in urls.items():

        data[key] = []. # initialize only once per key


        for x in value: 

            url = 'https://www.google.pt/search?q=' + key + '%20' + x

            driver.get(url)

            html = driver.page_source

            soup = BeautifulSoup(html, 'html.parser')

            a = soup.find("body")


            for child in a.find_all("div", {'class': 'g'}):

                h2 = child.find("span", {'class': 'Q8LRLc'})

                div = child.find("a", {'class': 'Fx4vi'})

                data[key].append({'h2': h2, 'div': div})  # update data for every h2/div found


    json.dump(data, write_file, indent=4) # This write can be done once, outside all loops!


driver.quit()

對我來說有點難測試,但希望能有所幫助!快樂編碼!


查看完整回答
反對 回復 2022-12-14
  • 1 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號