这里只是学习一下动态加载页面内容的抓取,并不适用于所有的页面。

使用到的工具就是python selenium和phantomjs,另外调试的时候还用了firefox的geckodriver.exe。

首先学习了下怎么在firefox中动态调试内容和抓取元素,这个其实在网页自动化测试中相当实用,想想测试同学每天重复点击业务页面和输入内容得有多痛苦吧。

一开始进展十分不顺利,因为phantomjs和firefox的调试加载的动态内容都不能在源码中有任何的体现,只能找出第一次get页面的内容,条目就30条左右,各种下拉加载,各种研究源码,均以失败告终。

最终我用chrome的开发工具找到了页面内容加载的api地址:

https://www.csdn.net/api/articles?type=more&category=home&shown_offset=0

后边就好办了,先用phantom加载首页,然后去访问api地址,这样循环访问,直到api的status为false,首页推荐的底裤就基本上扒掉了……

代码如下:

# coding=utf8
import json
import os
import sys from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities reload(sys)
sys.setdefaultencoding("utf-8") if os.path.exists("csdn_home.txt"):
os.remove("csdn_home.txt")
print "csdn_home.txt removed" dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap[
"phantomjs.page.settings.userAgent"] = "Mozilla / 5.0 (Windows NT 10.0 Win64 x64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 63.0.3 239.132 Safari / 537.36"
br = webdriver.PhantomJS()
br.get("https://www.csdn.net/")
data = br.find_elements_by_xpath('//ul/li[@class="clearfix"]/div/h2/a')
print len(data)
with open("csdn_home.txt", "a") as f:
for title in data:
print title.text
f.write(title.text + '\n')
print title.get_attribute('href')
f.write(title.get_attribute('href') + '\n') while True:
br.get("https://www.csdn.net/api/articles?type=more&category=home&shown_offset=0")
data = json.loads(br.find_element_by_xpath('//pre').text)
if data["status"] == "false":
break
else:
for i in data["articles"]:
print i["title"]
f.write(i["title"] + '\n')
print i["url"]
f.write(i["url"] + '\n')
f.close()
br.quit() # 退出phantomjs,否则phantomjs会一直留有进程,占用cpu和内存

看我怎么扒掉CSDN首页的底裤(python selenium+phantomjs爬取CSDN首页内容)的更多相关文章

  1. [Python学习] 简单爬取CSDN下载资源信息

    这是一篇Python爬取CSDN下载资源信息的样例,主要是通过urllib2获取CSDN某个人全部资源的资源URL.资源名称.下载次数.分数等信息.写这篇文章的原因是我想获取自己的资源全部的评论信息. ...

  2. Python 2.7_爬取CSDN单页面博客文章及url(二)_xpath提取_20170118

    上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手 1.爬取的单页面还是这个rooturl:http://blog.csd ...

  3. Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114

    年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...

  4. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  5. 使用Jsoup 爬取网易首页所有的图片

    package com.enation.newtest; import java.io.File; import java.io.FileNotFoundException; import java. ...

  6. Java爬虫实践--爬取CSDN网站图片为例

    实现的效果,自动在工程下创建Pictures文件夹,根据网站URL爬取图片,层层获取.在Pictures下以网站的层级URL命名文件夹,用来装该层URL下的图片.同时将文件名,路径,URL插入数据库, ...

  7. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  8. Hello Python!用 Python 写一个抓取 CSDN 博客文章的简单爬虫

    网络上一提到 Python,总会有一些不知道是黑还是粉的人大喊着:Python 是世界上最好的语言.最近利用业余时间体验了下 Python 语言,并写了个爬虫爬取我 csdn 上关注的几个大神的博客, ...

  9. windows版爬取csdn

    use LWP::UserAgent; use POSIX; use HTML::TreeBuilder::XPath; use Encode; use HTML::TreeBuilder; open ...

随机推荐

  1. 【Java】【8】StringUtils中isNotEmpty和isNotBlank的区别

    前言: 1,StringUtils.isNotEmpty(str)和StringUtils.isNotBlank(str)都是用来做非空判断的 2,通常用isNotBlank 3,import org ...

  2. 安卓——AlertDialog多样按钮

    在xml 设计页面添加标签 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln ...

  3. LeetCode 958. 二叉树的完全性检验

    958. 二叉树的完全性检验  显示英文描述 我的提交返回竞赛   用户通过次数119 用户尝试次数157 通过次数123 提交次数378 题目难度Medium 给定一个二叉树,确定它是否是一个完全二 ...

  4. Git中的文件上传、修改、撤消修改和删除

     1.添加文件.提交文件 1.1在learngit目录下创建一个readme.txt文件,并且输入内容. 1.2添加文件到版本库learngit 1.2.1使用git add 文件告诉Git把文件添加 ...

  5. zkw线段树模板题

    学了zkw线段树,觉得没什么必要刷专题的吧(切不动啊).. 那先放一个模板题吧(我绝不会和你说搬了一道树状数组模板题的!!!) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加 ...

  6. java 中多播、广播编程

    在 IP 协议层,有多播.广播的概念.IP 地址分为网络地址和主机地址,主机地址全部为1,就是广播地址.多播使用 D 类地址,从 224.0.0.0 到 239.255.255.255.IP 多播需要 ...

  7. Eclipse集成weblogic教程

    1.在线安装插件 1.1安装Oracle Weblogic Servers Tools oeop是添加的软件仓库的名字,随便写主要是方便记. 仓库链接:http://www.oracle.com/te ...

  8. Ubuntu 16.04 中安装谷歌 Chrome 浏览器

    http://jingyan.baidu.com/article/335530da98061b19cb41c31d.html 根据教程安装成功!! http://askubuntu.com/quest ...

  9. django+xadmin+djcelery实现后台管理定时任务

    继上一篇中间表的数据是动态的,图表展示的数据才比较准确.这里用到一个新的模块Djcelery,安装配置步骤如下: 1.安装 redis==2.10.6 celery==3.1.23 django-ce ...

  10. OOP⑷

    1.对象数组: /** *学生类 */ public class Student { // 创建一个对象数组保存3名学生的信息 Student[] stus = new Student[3]; int ...