Python+webdriver爬取博客园“我的闪存”并保存到本地

简介: [本文出自天外归云的博客园] 前篇 用webdriver+phantomjs实现无浏览器的自动化过程 本篇 想法与实现 我想要将博客园“我的闪存”部分内容爬取备份到本地文件,用到了WebDriver和Phantomjs的无界面浏览器。

[本文出自天外归云的博客园]

前篇

用webdriver+phantomjs实现无浏览器的自动化过程

本篇

想法与实现

我想要将博客园“我的闪存”部分内容爬取备份到本地文件,用到了WebDriver和Phantomjs的无界面浏览器。对于xpath的获取与校验需要用到firefox浏览器,安装firebug和firepath插件。代码如下:

# -*- coding: utf-8 -*-
import os,time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import selenium.webdriver.support.ui as ui

def crawl_memeory(username,pwd):
    #Start login cnblogs.
    driver = webdriver.PhantomJS()
    driver.get("http://passport.cnblogs.com/user/signin?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F")
    wait = ui.WebDriverWait(driver, 10)
    wait.until(lambda dr: dr.find_element_by_id('signin').is_displayed())
    driver.find_element_by_id("input1").send_keys(username)
    driver.find_element_by_id("input2").send_keys(pwd)
    driver.find_element_by_id("signin").click()
    time.sleep(3)
    #Navigate to my memory.
    memory_url = "https://ing.cnblogs.com#my"
    driver.get(memory_url)
    wait.until(lambda dr: dr.find_element_by_id('feed_list').is_displayed())
    element = driver.find_element_by_xpath(".//*[@id='pager_bottom']/a[last()-1]")
    page_num = int(element.text)
    #For each page, crawl the memory.
    store_dir_path = os.path.join(os.path.abspath(os.path.dirname(__file__)),"cnblogs_memory")
    if os.path.exists(store_dir_path):
        pass
    else:
        os.mkdir(store_dir_path)
    #Set the html's local storage path.
    store_html_path = os.path.join(store_dir_path,"cnblogs_memory.txt")
    f = open(store_html_path,"w")
    f.close()
    memory_url = "https://ing.cnblogs.com#my/p"
    with open(store_html_path,"a") as file:
        file.write("<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>博客园我的闪存</title></head><body>")
    for i in range(page_num):
        wait.until(lambda dr: dr.find_element_by_id('feed_list').is_displayed())
        memory_contents = driver.find_elements_by_xpath(".//*[@id='feed_list']/ul/li")
        for memory_content in memory_contents:
            inner_content = memory_content.get_attribute("innerHTML")
            with open(store_html_path,"a+") as file:
                file.write(inner_content.encode("utf-8"))
        pic_name = "cnblogs_memory_"+str(i+1)+".jpg"
        store_pic_path = os.path.join(store_dir_path,pic_name)
        driver.save_screenshot(store_pic_path)
        last_page_button = driver.find_element_by_xpath(".//*[@id='pager_bottom']/a[last()]")
        if(last_page_button.text.startswith("Next")):
            last_page_button.click()
    driver.quit()
    with open(store_html_path,"a") as file:
        file.write("</body></html>")

if __name__ == '__main__':
    pwd = "密码"
    username = "用户名"
    crawl_memeory(username,pwd)

使用方法

保存以上代码到本地“cnblogs_memory_crawl.py”文件,替换用户名与密码。在命令行中用python运行。

运行效果

本地会在当前运行脚本路径下生成cnblogs_memory文件夹并在其下生成txt文件以及截图文件,截图文件保存了博客园中所有我的闪存页:

手动将txt文件后缀改为html打开,效果如下:

进一步优化

可以编写脚本对保存到本地的文件内容进行进一步删取,保留你想要的部分。

 
 
 
 
 
相关文章
|
1月前
|
数据采集 JSON 数据格式
python爬虫之app爬取-charles的使用
charles 基本原理,charles抓包,分析,重发。
53 0
|
2月前
|
数据采集 存储 架构师
上进计划 | Python爬虫经典实战项目——电商数据爬取!
在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优惠券都是消费者在网购时的刚需,但在这些“优惠”背后已产生灰色地带。
|
4月前
|
数据采集 Python
Python爬虫:实现爬取、下载网站数据的几种方法
Python爬虫:实现爬取、下载网站数据的几种方法
200 1
|
1月前
|
数据采集 测试技术 API
python爬虫之app爬取-微信朋友圈
搭建appium环境,appium基本使用,API操作等等
77 0
|
1月前
|
数据采集 存储 数据处理
使用Python爬取豆瓣电影影评:从数据收集到情感分析
本文演示如何使用Python爬虫获取豆瓣电影《肖申克的救赎》的影评数据并进行情感分析。首先,安装requests、BeautifulSoup、pandas和TextBlob库。接着,编写爬虫抓取评论的用户名、评分和内容,存储为DataFrame。然后,利用TextBlob进行情感分析,得到情感分数。此方法有助于分析用户对电影的反馈。
81 1
|
1月前
|
数据采集 存储 安全
python爬虫之app爬取-mitmproxy 的使用
mitmproxy抓包原理,设置代理,MitmDump运用,mitmproxy使用。
38 0
|
1月前
|
数据采集 存储 数据挖掘
Python爬虫实战:打造一个简单的新闻网站数据爬取工具
本文将介绍如何运用Python编写一个简单而高效的网络爬虫,帮助您在实际项目中快速获取并存储新闻网站的数据。通过学习本文,您将了解到如何利用Python中的第三方库和技术来实现数据爬取,为您的数据分析和应用提供更多可能性。
|
2月前
|
数据采集 前端开发 JavaScript
Python爬虫之Ajax数据爬取基本原理#6
Ajax数据爬取原理【2月更文挑战第19天】
32 1
Python爬虫之Ajax数据爬取基本原理#6
|
3月前
|
数据采集 Linux API
Python爬虫实践指南:利用cpr库爬取技巧
Python爬虫实践指南:利用cpr库爬取技巧
|
3月前
|
Python Go 机器人
Golang每日一练(leetDay0021) 旋转链表、不同路径、不同路径II
Golang每日一练(leetDay0021) 旋转链表、不同路径、不同路径II
32 0
Golang每日一练(leetDay0021) 旋转链表、不同路径、不同路径II

热门文章

最新文章