主要代码

import scrapy
from scrapy import Selector
from first.items import TYItem
import reclass TianyaSpider(scrapy.Spider):name = 'tianya'allowed_domains=['tianya.cn']# 对请求的返回进行处理的配置meta = {'dont_redirect': True,  # 禁止网页重定向'handle_httpstatus_list': [301, 302]  # 对哪些异常返回进行处理}cookies={}header={ 'User-Agent': 'Mozilla / 5.0(X11;Linux x86_64) AppleWebKit /537.36(KHTML, likeGecko) Chrome / 54.0.2840.71Safari / 537.36'}start_urls=["http://bbs.tianya.cn/post-funinfo-7049670-1.shtml","http://bbs.tianya.cn/post-16-1632189-1.shtml","http://bbs.tianya.cn/post-16-1642094-1.shtml",]def get_url(self,pre_url):url_head = pre_url.split('-')[0:-1]page = int(pre_url.split('-')[-1].split('.')[0])+1return '-'.join(url_head)+'-'+str(page)+'.shtml'def start_requests(self):for url in self.start_urls:yield scrapy.Request(url=url,callback=self.parse,headers=self.header,meta=self.meta)reg = re.compile(r'时间:(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})')def parse(self, response):if response.status != 200:returnitem = TYItem()item['title'] = Selector(response).xpath('//*[@id="post_head"]/h1/span[1]/span/text()').extract()[0]content_div = Selector(response).xpath('//div[@class="atl-main"]/div[starts-with(@class,"atl-item")]')for each in content_div:try:item['author'] = each.xpath('.//div[@class="atl-info"]/span/a/text()').extract()[0]except:item['author'] = ""item['content'] = each.xpath('.//div[starts-with(@class,"bbs-content")]').xpath('string(.)').extract()[0]. \replace('\r\n', '').replace('\t', '').replace('\u3000', '').replace('\n', "")try:post_time = each.xpath('.//div[@class="atl-info"]/span[2]/text()').extract()[0]item['post_time'] = re.findall(self.reg, post_time)[0]except IndexError:item['post_time'] = ""try:item['floor'] = each.xpath('.//div[starts-with(@class,"bbs-content")]/following-sibling::div[1]/span/text()').extract()[0][0:-1]except IndexError:item['floor'] = ''yield itemnext_url = self.get_url(response.url)yield scrapy.Request(url=next_url, callback=self.parse, headers=self.header,cookies=self.cookies, meta=self.meta)

items.py

class TYItem(scrapy.Item):title=scrapy.Field()#帖子标题author = scrapy.Field()#楼主和层主content=scrapy.Field()#内容,层中层的内容没有爬取post_time=scrapy.Field()#发表时间floor=scrapy.Field()#楼数

在爬取帖子内容content的时候,会出现比较奇怪的字符\u3000,或者\xa0等等,可以用replace替换成空格
天涯帖子的格式还是比较规范的,xpath选择起来不是太费事(特此一体,某数字论坛,年代久远,帖子内容首页,前2页,最后几页样式不一样,坑!)
分析天涯帖子的网址,比如
http://bbs.tianya.cn/post-funinfo-7049670-1.shtml
其中7049670可以认为是文章的id,1是页数,值得一提的是,天涯在处理超过页数的请求时,会返回301,
Status Code:301 Moved Permanently重定向到最后一页,我们可以根据response.status判断是否帖子已经结束
至于为什么在parse函数里面有try…exception…因为帖子的第一个content,就是楼主的主帖html样式和回复贴不太一样,根据同样的xpath选取不到,会跑出IndexError,没什么好的解决办法,只能这么的简单粗暴,捕获异样,把内容设置为空字符串
pipelines.py

import pymongo
from datetime import datetime
import threading
client=pymongo.MongoClient(host='127.0.0.1',port=27017)
db=client['scrapy_data']['tianya']class TYPipeline(object):def process_item(self,item ,spider):with open('tianya4.txt','a') as f:f.write(str(item))f.write('\n')# if item['post_time'] !='':#     item['post_time']=datetime.strptime(item['post_time'],'%Y-%m-%d %H:%M:%S')# if item['floor'] !='':#     item['floor']=int(item['floor'])# self.db.insert(dict(item))# return item

注释掉的部分是存入mongodb的代码部分,把格式转化是为了在mongodb中便于查询.
讲道理的话可以根据上层的的网址,比如莲蓬鬼话http://bbs.tianya.cn/list-16-1.shtml
爬取到每个帖子的路径,href属性

<a href="/post-16-1632076-1.shtml" target="_blank">
亲身经历病房灵异,直接崩溃无神论者!!<span class="art-ico art-ico-3" title="内有7张图片"></span></a>

下一页的超链接“`
/list.jsp?item=16&nextid=1478769822000

用不同的parse函数处理即可,这样理论上可以爬取一个板块所有的帖子,由于天涯板块还有子版块,所以仅仅这样只能爬取某个板块.
处理帖子的parse函数可以通用,例子中start_urls三个网址属于两个不同的板块,最后爬取的文件基本是这样的(懒得截图,就这么看把)

{‘author’:” ”,
‘content’: ‘大家。…….家看看就行了。’,
‘floor’: “”,
‘post_time’: ”,
‘title’: ‘[天涯头……..’}
{‘author’: ‘小鉴定师大宝’,
‘content’: ‘@小鉴定师大宝 2016-08-21 ’
‘15:23:16大家好,我是一个DNA鉴定师……’,
‘floor’: ‘2’,
‘post_time’: ‘2016-08-21 15:24:10’,
‘title’: ‘[天涯头条]我是一……..’}
“`
感觉还有待完善

scrapy爬取天涯帖子内容相关推荐

  1. python 抓取天涯帖子内容并保存

    python 抓取天涯帖子内容并保存 作者:大捷龙 csdn : http://blog.csdn.net/koanzhongxue ** 分析:天涯的帖子下载可以分为以下几个步骤 手动传入一个帖子首 ...

  2. scrapy 爬取论坛帖子名称及链接(递归方式获取)

    本文主要爬取西安论坛帖子,如果要爬取内容及评论热度等可以再深入爬取 首先建立spider xi'an,命令 scrapy genspider xian ixian.com xian.py内容: imp ...

  3. python天涯帖子_python多线程抓取天涯帖子内容示例

    #coding:utf-8 import urllib import re import threading import os,time class Down_Tianya(threading.Th ...

  4. Python爬虫实战(二):爬取天涯帖子(只看楼主)

    先上代码 #coding=utf-8 import requests from bs4 import Tag from bs4 import BeautifulSoup def getHtml(url ...

  5. 频繁爬取天涯的帖子会不会被抓_web爬虫-搞一波天涯论坛帖子练练手

    今天我们将要学习如何使用BeautifulSoup库来抓取网站.BeautifulSoup是一个很好的工具,用于解析HTML代码并准确获取所需的信息.因此,无论您是从新闻网站,体育网站,还是在线商店的 ...

  6. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  7. python爬取论坛付费内容_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

  8. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  9. 爬虫(8)-Scrapy爬取微博用户粉丝,关注和微博内容

    本文主要讲解使用scrapy爬取微博用户的关注,粉丝和微博内容. 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/cate ...

最新文章

  1. PANS最新脑神经科学研究:激活一种新语言并不费力气
  2. 数据挖掘技术简介[转]
  3. linux 裸设备使用,linux裸设备使用
  4. 004-linux常用命令-权限管理命令
  5. 渲染完毕再渲染数据_三星Galaxy S21渲染图再曝:多种配色、新设计
  6. git 裁切_GitHub - taiyang0725/PicCrop: 图片裁剪的工具类,基于uCrop封装,使用十分便捷...
  7. Ubuntu下搭建UDK2018开发环境
  8. ContextCaptureMaster/Smart3D 集群简单配置
  9. Oracle19c下载安装和配置教程
  10. otool介绍(转http://www.mc2lab.com/?p=68)
  11. GD32创建工程与启动文件选择
  12. appium自动化测试
  13. 二阶矩阵转置怎么求_使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
  14. ios 网速监控_iOS怎么实时显示当前的网速
  15. WebService--CXF与Spring的整合(jaxws:endpoint形式配置)以及客户端调用(spring配置文件形式,不需要生成客户端代码)
  16. 用MySQL后电脑频繁蓝屏_电脑容易蓝屏怎么办_电脑突然开始频繁蓝屏修复方法-win7之家...
  17. 如何更改计算机屏幕分辨率,换了显示器分辨率不对怎么办_换了电脑显示器不清晰怎么解决-win7之家...
  18. 海蜘蛛软路由linux安装教程,软路由安装设置教程【详细步骤】-太平洋IT百科
  19. 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
  20. keycloak 验证 token

热门文章

  1. 访问tomcat出现java.lang.IllegalStateException No output folder错误解决方法
  2. 2ASK、2FSK、2PSK、2DPSK、4ASK、4FSK、4PSK、4DPSK、QPSK,以及4QAM、16QAM和MSK、GMSK这些调制和解调过程
  3. .net 如何引用迅雷组件
  4. 关于爬取arXiv论坛论文并按照论文主题进行分类的办法
  5. 计量经济学及Stata应用案例(一)
  6. windows硬盘读写测试
  7. [Go WebSocket] 为什么我选用Go重构Python版本的WebSocket服务?
  8. 如何下载安装jenkins
  9. VirtualBox-7.0.6 下载与安装
  10. 微旅游“领跑”小长假“清肺”