抓百度指数的数据,比较简单的演示:selenium+浏览器(我这是Firefox)的代码。
代码如下:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
# 此函数用于打开浏览器
def openbrowser(): global browser url = "http://index.baidu.com/"#百度指数网站 browser = webdriver.Firefox() browser.get(url) # 点击网页的登录按钮 browser.find_element_by_xpath("/html/body/div/div[1]/div[2]/div[1]/div[4]/span/span").click() time.sleep(3) #传入账号密码 account="你的百度账号" passwd="你百度账号的密码" try: browser.find_element_by_id("TANGRAM__PSP_4__userName").send_keys(account) browser.find_element_by_id("TANGRAM__PSP_4__password").send_keys(passwd) browser.find_element_by_id("TANGRAM__PSP_4__submit").click() except: browser.find_element_by_id("TANGRAM_12__password").send_keys(account) browser.find_element_by_id("TANGRAM_12__userName").send_keys(passwd) browser.find_element_by_id("TANGRAM_12__submit").click()time.sleep(3)
def deal(name):
# 清空网页输入框 browser.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[1]/div/div[2]/form/input[3]").clear() # 写入需要搜索的百度指数 browser.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[1]/div/div[2]/form/input[3]").send_keys(name) # 点击搜索 try: browser.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[1]/div/div[2]/div/span").click() except: browser.find_element_by_id("schsubmit").click() time.sleep(2) browser.execute_script("window.scrollTo(0,1000)") # 执行滚屏操作 browser.save_screenshot("baiduIndex.png") # 由于这里图片数据无法直接抓取,所以先截图保存browser.close()
browser.quit()
if __name__ == '__main__': # 主函数
openbrowser()
resultString=deal("黑客帝国",2018,5,25)
PS:代码只是实现selenium的初步演示,没有考虑异常及复杂的滚屏处理。另外,这里使用XPath,可读性较差,同时如果网站稍有改版,代码可能需要进一步更新。