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

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

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

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

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

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

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

代码如下:

  1. # coding=utf8
  2. import json
  3. import os
  4. import sys
  5. from selenium import webdriver
  6. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  7. reload(sys)
  8. sys.setdefaultencoding("utf-8")
  9. if os.path.exists("csdn_home.txt"):
  10. os.remove("csdn_home.txt")
  11. print "csdn_home.txt removed"
  12. dcap = dict(DesiredCapabilities.PHANTOMJS)
  13. dcap[
  14. "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"
  15. br = webdriver.PhantomJS()
  16. br.get("https://www.csdn.net/")
  17. data = br.find_elements_by_xpath('//ul/li[@class="clearfix"]/div/h2/a')
  18. print len(data)
  19. with open("csdn_home.txt", "a") as f:
  20. for title in data:
  21. print title.text
  22. f.write(title.text + '\n')
  23. print title.get_attribute('href')
  24. f.write(title.get_attribute('href') + '\n')
  25. while True:
  26. br.get("https://www.csdn.net/api/articles?type=more&category=home&shown_offset=0")
  27. data = json.loads(br.find_element_by_xpath('//pre').text)
  28. if data["status"] == "false":
  29. break
  30. else:
  31. for i in data["articles"]:
  32. print i["title"]
  33. f.write(i["title"] + '\n')
  34. print i["url"]
  35. f.write(i["url"] + '\n')
  36. f.close()
  37. 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. file 文件上传后缀转化小写

    1.上传的文件后缀是大写的我们做上传文件的时候考虑的比较少,所以我就想把客户上传的文件后缀统一一下,后面我解析附件的时候比较好解析.例子:我得到的文件名称:$infoFileName;$fileNam ...

  2. codepen素材 coffeeScript -> JavaScript

    将coffeeScript代码复制到下面的网址进行转换: http://js2.coffee/

  3. Linux -- 基于zookeeper的java api(一)

    Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...

  4. html 巧用data-for藏自定义属性

    <div class="form-ele"> <label for="week" class="label col-1"& ...

  5. FTP服务器搭建(Centos7)

    1.1.1 查看是否安装vsftp rpm -qa | grep vsftpd 1.1.2 如果没有安装: yum -y install vsftpd 1.2.3 vsftpd.conf 配置文件 匿 ...

  6. InnoDB支持的最大事务数量

    Innodb存储引擎有rollback segment,每个rollback segment中记录了1024个undo log segment,在每个undo log segment中进行undo页的 ...

  7. nmon+nmon analyser安装使用教程

    nmon一般是两种用法,一是交互式用法查看实时的内存/cpu/网络/磁盘等情况,二是抓取一段时间内的实时的内存/cpu/网络/磁盘记到csv格式的.nmon文件中然后用nmon analyse做可视化 ...

  8. Python获取时间戳

    import datetime as dt dt.datetime.now().microsecond

  9. xadmin后台导出时gunicorn报错ascii

    django + xadmin + nginx + gunicorn部署后,xadmin后台导出model数据报错,gunicorn日志记录为:UnicodeEncodeError: 'ascii' ...

  10. bzoj1294

    题解: 首先发现假如一个豆豆被多边形围住了,那么从这个豆豆引出一条射线 会有奇数个焦点 然后我们从每个豆豆引出一条射线 然后状压dfs 代码: #include<bits/stdc++.h> ...