python爬虫CSDN文章抓取
https://blog.csdn.net/nealgavin/article/details/27230679
CSDN原则上不让非人浏览訪问。正常爬虫无法从这里爬取文章,须要进行模拟人为浏览器訪问。
使用:输入带文章的CSDN链接自己主动生成正文的HTML,文件名称为标题名
#!/usr/bin/env python
# coding=utf-8
#########################################
#> File Name: CSDN_article.py
#> Author: nealgavin
#> Mail: nealgavin@126.com
#> Created Time: Tue 27 May 2014 03:42:54 PM CST
#########################################
import random
import socket
import urllib2
import urllib
import re
import string
import BeautifulSoup
import sys
import cookielib
ERROR = {
'0':'Can not open the url,checck you net',
'1':'Creat download dir error',
'2':'The image links is empty',
'3':'Download faild',
'4':'Build soup error,the html is empty',
'5':'Can not save the image to your disk',
}
class BrowserBase(object):
"""模拟浏览器"""
def __init__(self):
socket.setdefaulttimeout(20)
self.HTML = ''
self.articleName = ''
self.link = ''
def speak(self,name,content):
print '[%s]%s' %(name,content)
def openurl(self,url):
"""
打开网页
"""
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
self.opener = urllib2.build_opener(cookie_support,urllib2.HTTPHandler)
urllib2.install_opener(self.opener)
user_agents = [
'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
'Opera/9.25 (Windows NT 5.1; U; en)',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ",
]
agent = random.choice(user_agents)
self.opener.addheaders = [("User-agent",agent),("Accept","*/*"),('Referer','http://www.google.com')]
try:
res = self.opener.open(url)
self.HTML = res.read()
# print res.read()
except Exception,e:
self.speak(str(e),url)
raise Exception
else:
return res
def OUT(self):
print self.HTML
def getArticleName(self,tags):
re_rules = r'<span class="(.+?)"><a href="(.+?)">(.+?)</a>'
p = re.compile(re_rules,re.DOTALL)
title = p.findall(str(tags))
self.chineseListOut(title)
def chineseListOut(self,tags):
title = []
for tag in tags:
for ele in tag:
# print '+',str(ele),'-'
title.append(ele.strip())
self.link = "http://blog.csdn.net" + title[1]
tle = title[2].split()
self.articleName = '-'.join(tle)
def buildArticleHTML(self):
self.HTML = str(self.HTML)
self.HTML = '<html><meta charset="utf-8"><body>'+self.HTML
self.HTML = self.HTML + '</body><html>'
def getMainArticle(self):
"""get the main article of CSDN blog"""
soup = BeautifulSoup.BeautifulSoup(self.HTML)
tags_all = soup.findAll('div',{'class':'article_title'})
self.getArticleName(tags_all)
tags_all = soup.findAll('div',{'id':'article_content','class':'article_content'})
self.HTML = tags_all[0]
self.buildArticleHTML()
def saveArticleAsHTML(self):
filePath = self.articleName+'.html'
try:
filePointer = open(filePath,'w+')
except:
print 'open error'
print 'path = ',filePath
filePointer.write(self.HTML)
filePointer.close()
browser = BrowserBase()
url = raw_input('Input the links of CSDN article you needed!\n')
if url is None or len(url) == 0:
url = "http://blog.csdn.net/nealgavin/article/details/27110717"
browser.openurl(url)
browser.getMainArticle()
browser.saveArticleAsHTML()
python爬虫CSDN文章抓取的更多相关文章
- 如何让Python爬虫一天抓取100万张网页
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...
- CSDN文章抓取
在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框: 抓取的思想是,利用 bs4 查找所有的 div,用正则筛选出每个 div 里面的中文,找到中文字数最多的 div 就 ...
- 芝麻HTTP:Python爬虫实战之抓取爱问知识人问题并保存至数据库
本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表达式的简 ...
- python爬虫 前程无忧网页抓取
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片
ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇通过做一个PySpider 项目,来理解 Py ...
- 【Python爬虫基础】抓取知乎页面所有图片
抓取地址所有图片 #! /usr/bin/env python from urlparse import urlsplit from os.path import basename import ur ...
- 芝麻HTTP:Python爬虫实战之抓取淘宝MM照片
本篇目标 1.抓取淘宝MM的姓名,头像,年龄 2.抓取每一个MM的资料简介以及写真图片 3.把每一个MM的写真图片按照文件夹保存到本地 4.熟悉文件保存的过程 1.URL的格式 在这里我们用到的URL ...
- 【Python爬虫程序】抓取MM131美女图片,并将这些图片下载到本地指定文件夹。
一.项目名称 抓取MM131美女写真图片,并将这些图片下载到本地指定文件夹. 共有6种类型的美女图片: 性感美女 清纯美眉 美女校花 性感车模 旗袍美女 明星写真 抓取后的效果图如下,每个图集是一个独 ...
- 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...
随机推荐
- 由于更换硬盘没有删除系统自启动读取挂载硬盘导致系统报错:fsck.ext4 unable to resolve 'UUID=a4a7a0f7-b54f-4774-9fb1'
由于更换硬盘没有删除系统自启动读取挂载硬盘导致系统报错:fsck.ext4 unable to resolve 'UUID=a4a7a0f7-b54f-4774-9fb1' 此时进入系统已root模式 ...
- 使用VS Code写PHP并进行调试
VS Code(Visual Studio Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器. 1.先从官网下载安装好VS Code.官方下载地址是https://code.visua ...
- mysql配置文件my.cnf模板
[client] default-character-set = utf8mb4 port = PORT socket = /srv/myPORT/run/mysql.sock [mysqld] us ...
- 提高VS2010运行速度的技巧
任务管理器,CPU和内存都不高,为何?原因就是VS2010不停地读硬盘导致的; 写代码2/3的时间都耗在卡上了,太难受了; 研究发现,VS2010如果你装了VC等语言,那么它就会自动装SQL Serv ...
- MAC SVN 基本设置 终端命令
extends:http://www.cnblogs.com/heiniuhaha/archive/2012/07/31/2616493.html 安装XCode后Mac OS X 系统已经内置了sv ...
- Spark2 Dataset多维度统计cube与rollup
val df6 = spark.sql("select gender,children,max(age),avg(age),count(age) from Affairs group by ...
- Redis提供的持久化机制(RDB和AOF)【转载】
Redis提供的持久化机制 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近 ...
- ELK之写入MySQL数据库
安装MySQL5.6 创建数据库并且授权 create database elk character set utf8 collate utf8_bin; grant all on elk.* to ...
- TOP100summit:【分享实录】Twitter 新一代实时计算平台Heron
本篇文章内容来自2016年TOP100summit Twitter technical lead for Heron Maosong Fu 的案例分享. 编辑:Cynthia Maosong Fu:T ...
- Eigen中的基本函数 及其对应的matlab函数
原文地址C++矩阵库 Eigen 快速入门 不仅有函数的基本形式,还有对应的matlab函数,用起来很方便. Eigen 矩阵定义 #include <Eigen/Dense> Matri ...