看我怎么扒掉CSDN首页的底裤(python selenium+phantomjs爬取CSDN首页内容)
这里只是学习一下动态加载页面内容的抓取,并不适用于所有的页面。
使用到的工具就是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首页内容)的更多相关文章
- [Python学习] 简单爬取CSDN下载资源信息
这是一篇Python爬取CSDN下载资源信息的样例,主要是通过urllib2获取CSDN某个人全部资源的资源URL.资源名称.下载次数.分数等信息.写这篇文章的原因是我想获取自己的资源全部的评论信息. ...
- Python 2.7_爬取CSDN单页面博客文章及url(二)_xpath提取_20170118
上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手 1.爬取的单页面还是这个rooturl:http://blog.csd ...
- Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114
年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...
- 使用Jsoup 爬取网易首页所有的图片
package com.enation.newtest; import java.io.File; import java.io.FileNotFoundException; import java. ...
- Java爬虫实践--爬取CSDN网站图片为例
实现的效果,自动在工程下创建Pictures文件夹,根据网站URL爬取图片,层层获取.在Pictures下以网站的层级URL命名文件夹,用来装该层URL下的图片.同时将文件名,路径,URL插入数据库, ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- Hello Python!用 Python 写一个抓取 CSDN 博客文章的简单爬虫
网络上一提到 Python,总会有一些不知道是黑还是粉的人大喊着:Python 是世界上最好的语言.最近利用业余时间体验了下 Python 语言,并写了个爬虫爬取我 csdn 上关注的几个大神的博客, ...
- windows版爬取csdn
use LWP::UserAgent; use POSIX; use HTML::TreeBuilder::XPath; use Encode; use HTML::TreeBuilder; open ...
随机推荐
- 【Java】【8】StringUtils中isNotEmpty和isNotBlank的区别
前言: 1,StringUtils.isNotEmpty(str)和StringUtils.isNotBlank(str)都是用来做非空判断的 2,通常用isNotBlank 3,import org ...
- 安卓——AlertDialog多样按钮
在xml 设计页面添加标签 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln ...
- LeetCode 958. 二叉树的完全性检验
958. 二叉树的完全性检验 显示英文描述 我的提交返回竞赛 用户通过次数119 用户尝试次数157 通过次数123 提交次数378 题目难度Medium 给定一个二叉树,确定它是否是一个完全二 ...
- Git中的文件上传、修改、撤消修改和删除
1.添加文件.提交文件 1.1在learngit目录下创建一个readme.txt文件,并且输入内容. 1.2添加文件到版本库learngit 1.2.1使用git add 文件告诉Git把文件添加 ...
- zkw线段树模板题
学了zkw线段树,觉得没什么必要刷专题的吧(切不动啊).. 那先放一个模板题吧(我绝不会和你说搬了一道树状数组模板题的!!!) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加 ...
- java 中多播、广播编程
在 IP 协议层,有多播.广播的概念.IP 地址分为网络地址和主机地址,主机地址全部为1,就是广播地址.多播使用 D 类地址,从 224.0.0.0 到 239.255.255.255.IP 多播需要 ...
- Eclipse集成weblogic教程
1.在线安装插件 1.1安装Oracle Weblogic Servers Tools oeop是添加的软件仓库的名字,随便写主要是方便记. 仓库链接:http://www.oracle.com/te ...
- Ubuntu 16.04 中安装谷歌 Chrome 浏览器
http://jingyan.baidu.com/article/335530da98061b19cb41c31d.html 根据教程安装成功!! http://askubuntu.com/quest ...
- django+xadmin+djcelery实现后台管理定时任务
继上一篇中间表的数据是动态的,图表展示的数据才比较准确.这里用到一个新的模块Djcelery,安装配置步骤如下: 1.安装 redis==2.10.6 celery==3.1.23 django-ce ...
- OOP⑷
1.对象数组: /** *学生类 */ public class Student { // 创建一个对象数组保存3名学生的信息 Student[] stus = new Student[3]; int ...