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()
对我来说有点难测试,但希望能有所帮助!快乐编码!
添加回答
举报