自学笔记2-爬虫分析中国人民银行货币政策报告2

由于肺炎假期在家太无聊,开始学习模式。

今天终于实现了把央行货币政策执行报告全部爬下来。高兴之余写篇博客记录下。

需要安装的项目有selenium和pyautogui。

代码分3个步骤:

1. 配置selenium chrome

2. 在央行第一个页面把所有执行报告的链接拿下来

3. 进到一个个页面把PDF文件下下来

 

1. 配置selenium chrome

一般教程上说的PhantomJS已经停止更新了,所以要么用Firefox要么用chrome

    option = webdriver.ChromeOptions()
    #option.add_argument('--headless') # 开启无界面模式
    option.add_argument('log-level=3') #不显示一般的LOG信息
    prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
    option.add_experimental_option('prefs', prefs)#配置默认的保存地址
    driver=webdriver.Chrome(executable_path=r'C:\mysniper\chromedriver',chrome_options=option)#新建一个浏览器页面

    driver.implicitly_wait(10)#默认等待加载完成页面,最长等10秒

上面的代码就最后两行是必须的,前面的配置没有也没关系。最后一句特别说一下,这个的意思是后面调用find_element_by***的时候要等待页面加载完成才执行,不然可能由于页面有JS,没加载完就不能完全显示。参数10的意思是最长等10秒。

2. 在央行第一个页面把所有执行报告的链接拿下来

    driver.get("http://www.pbc.gov.cn/zhengcehuobisi/125207/125227/125957/index.html")

    da=driver.find_elements_by_class_name("unline")
    reportHref=[]
    reportData=[]
    reportPDFlink=[]
    for item in da:
        itemHref=item.find_element_by_partial_link_text(u"执行报告").get_attribute("href")
        if itemHref=="http://www.pbc.gov.cn/zhengcehuobisi/125207/125227/125957/125985/2889622/index.html":
            continue
        reportHref.append(itemHref)
        itemData=item.find_element_by_class_name("hui12").get_attribute('textContent')
        reportData.append(itemData)

把下面画红线的链接一个个存起来,顺便把报告发布的时间也存起来。

3. 进到一个个页面把PDF文件下下来

    for i in range(0,len(reportHref)-1):
        driver.get(reportHref[i])
        driver.implicitly_wait(10)
        links=driver.find_elements_by_xpath("//a")
        for link in links:
            if link.get_attribute("href")!=None and link.get_attribute("href").find("pdf")>0:
                #print(link.get_attribute("href"))
                #print(link.get_attribute("textContent"))
                actions = ActionChains(driver)
                actions.context_click(link)
                actions.perform()
                pyautogui.typewrite(['down','down','down','down','enter','enter'])
                time.sleep(1)
                filename=reportData[i]+".pdf"
                pyautogui.write(filename, interval=0.25)
                pyautogui.press('enter')
                time.sleep(1)
                pyautogui.press('esc')
                time.sleep(15)

这里一个个打开前面保存的页面。把所有链接筛出来,其中不为空且带有PDF字样的链接就是我们要的文件地址。但是如果直接点击,默认的文件名不是我们想要的。因此需要用到pyautogui。

首先通过selenium里的动作链ActionChains建立一个左键点击的事件。后面就靠pyautogui了。

pyautogui.typewrite()函数可以模拟一系列注册的键盘事件,按下有键后点4次下就选中了“链接另存为”。

pyautogui.write(filename, interval=0.25)用于模拟键盘输入,而且还可以模拟间隔时间。其实就是在另存为的框里输入文件名。

pyautogui.press('enter')顾名思义按回车健。这样就保存了。因为我的浏览器会再弹出一次保存画面,所以多了一次esc。

然后等15秒保证下载完成再进入下一个页面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值