python如何登录并爬取获得百度指数统计图数据


一:因为百度指数的搜索必须先登录才能进行下一步操作,所以先解决登录的问题。

 解决登录有两种常用方式:1  利用cookie来登录  2 破解验证码进行登录

如果用phantomjs就能直接截取全图,更利于统计图精确定位了

1:add_Cookie:

用 Chrome():

将登录前的cookie获得,get_cookies()

将所有列表值进行打印。

再将手动登录后的cookie获得,对比登录前和登录后的cookie发现,登录后的cookie比登录前的cookie的长度多2.

对比哪里不同,将不同的cookie设置变量分别为 cookie1,cookie2

或者直接先delete_all_cookie  再直接将所有登录后的cookie用for循环进行全部的添加

2:refresh页面刷新,并全屏窗口以便截图:

指数搜索填写

3:DOWN键盘将窗口滑动到底部,save图片:

因为chrome无法截取全图,那么我们先把他滑动到底部

4:调用PIL的Image模块打开图片操作:

获取元素,并用location取得元素在网页的位置

对将位置进行滑动后,y轴的元素位置的参数进行变化

做x轴和大小的微调。

用croll进行精确局部截图

5:获得统计图:

chrome代码如下:

# -*- coding:utf-8 -*-
import time


import PIL
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys




def main():
    driver = webdriver.Chrome()
    driver.delete_all_cookies()
    driver.get('http://index.baidu.com/')
    driver.maximize_window()
    driver.save_screenshot('zhishu.png')
    driver.delete_all_cookies()
    # isover = int(raw_input('完成?1/2'))
    isover = 1
    print isover==1
    if isover == 1:
        cookie1 =
        # cookie1 =
        # cookie2 =
        for i in cookie1:
            driver.add_cookie(i)


    time.sleep(5)
    driver.refresh()
    print '登陆成功!保存登陆快照'
    time.sleep(3)
    driver.save_screenshot('new.png')
    # whatSearch = raw_input('您想搜索什么指数?')
    whatSearch = '特朗普'
    driver.find_element_by_id('schword').send_keys(whatSearch.decode('utf-8'))
    time.sleep(1)
    driver.find_element_by_id('searchWords').click()
    time.sleep(2)
    driver.maximize_window()
    time.sleep(2)
    builder = ActionChains(driver)
    for down in range(0,4):
        builder.key_down(Keys.DOWN).perform()
    time.sleep(3)
    driver.save_screenshot('tlpAll.png')


    imgObj = driver.find_element_by_xpath('//*[@id="trend"]')
    left = imgObj.location['x']
    top = imgObj.location['y']
    right = imgObj.location['x'] + imgObj.size['width']
    bottom = imgObj.location['y'] + imgObj.size['height']




    im = Image.open('tlpAll.png')
    im = im.crop((left+15, top-280, right-15, bottom-418))
    im.save('telangpu.png')










if __name__ == "__main__":
    main()

猜你喜欢

转载自blog.csdn.net/pythoning183/article/details/78513974
今日推荐