python 使用selenium模块实现自动搜索百度百科词条(模拟人工搜索)
目标:模拟人工搜索百度百科词条,爬取相关信息,自动删除上一个关键词,输入新关键词,继续搜索,直到循环结束。
代码:
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from bs4 import BeautifulSoup univs = ['清华大学', '不知道大学', '北京大学'] AllUnivInfolist = [] browser = webdriver.Firefox() # 创建一个浏览器对象,这里还可以使用chrome等浏览器 try: browser.get('https://baike.baidu.com/') # 打开百科 for univ in univs: browser.find_element_by_id('query').send_keys(univ) # 找到输入框输入字段 time.sleep(3) browser.find_element_by_id('search').send_keys(Keys.ENTER) # 找到搜索按钮模拟点击 time.sleep(3) html = browser.page_source # 获取html页面 soup = BeautifulSoup(html, 'html.parser') # beautifulsoup库解析html title = soup.find_all('dt', class_="basicInfo-item name") # key node = soup.find_all('dd', class_="basicInfo-item value") # value allunivinfo = [] titlelist = [] infolist = [] for i in title: # 将所有dt标签内容存入列表 title = i.get_text() titlelist.append(title) for i in node: # 将所有dd标签内容存入列表 info = i.get_text() infolist.append(info) for i, j in zip(titlelist, infolist): # 多遍历循环,zip()接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。 info = ''.join((str(i) + ':' + str(j)).split()) allunivinfo.append(info) AllUnivInfolist.append(allunivinfo) # 模拟ctrl+a 操作 全选输入框内容 browser.find_element_by_id('query').send_keys(Keys.CONTROL, 'a') time.sleep(3) # 删除输入框内容 (删除操作 模拟键盘的Backspace) browser.find_element_by_id('query').send_keys(Keys.BACK_SPACE) time.sleep(3) finally: browser.quit() with open("AllUnivInfo.txt", "wt", encoding='utf8') as out_file: for u in AllUnivInfolist: out_file.write(str(u)+'\n')
运行结果(部分):