1 回答

TA貢獻1835條經驗 獲得超7個贊
我看到了很多問題,大多數是當它們應該在循環之外時卻在循環內,或者當它們應該在循環中時卻在循環之外。
您在循環內設置變量
h2
和,但將它們添加到循環外,因此只會添加最后一個值。div
for 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()
對我來說有點難測試,但希望能有所幫助!快樂編碼!
添加回答
舉報