爬点东西 -Scrapy

今天是小年,团聚的日子,想想这一年中发生过大大小小的事,十分感慨。

言归正传: 接触python ,想着可不可以自己爬它点数据,目的是能够过滤掉他这些令人头痛的广告,当然也可以顺带熟悉一下python 的scrapy框架 那就开始吧

scrapy startproject btxxxx

scrapy genspider -t crawl btxxxx xxx.info

spider的代码

 
 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
import urllib
from xxx.items import XxxxItem
import sys reload(sys) sys.setdefaultencoding('utf8') class BtxxxxSpider(CrawlSpider):
name = 'btxxxx'
allowed_domains = ['btxxxx.info']
def __init__(self, key_word='', *args, **kwargs):
super(BtxxxxSpider, self).__init__(*args, **kwargs)
self.key_words = key_word
quote_str = urllib.quote(self.key_words)
# 网址就不搞出来啦
zero_url = 'http://www.xxxx.info/search/' + quote_str + '.html'
self.start_urls = [zero_url] rules = (
Rule(LinkExtractor(allow=r'\/search\/b-[\s\S]*\.html'),callback='root_url', follow=True),
Rule( LinkExtractor(
allow=r'\/search\/b-[a-z,A-Z,0-9]+\/[0-9]+-[0-9]+\.html'), callback='content_url', follow=True
),
Rule(LinkExtractor(allow=r'\/wiki\/.*\.html'), callback='parse_item', follow=False)
) def root_url(self, response):
pass def content_url(self, response):
pass def parse_item(self, response):
i = BtxxxxItem()
script_txt = response.xpath('//*[@id="wall"]/h2/script/text()').extract()
if len(script_txt) !=0:
url_str = script_txt[0].replace('document.write(decodeURIComponent(', '').replace('));', '').replace('"','')
link_name = urllib.unquote(str(url_str.replace('+', '')))
i["file_name"] = link_name
print "*" * 10
#print link_name
print "*" * 10
file_nodes = response.xpath('//*[@id="wall"]/div/table/tr[last()]/td/text()').extract()
print "#" * 10
print file_nodes
print "#" * 10
if len(file_nodes) > 0 :
i["file_type"] = file_nodes[0].replace('\n', '')
i["file_createtime"] = file_nodes[1].replace('\n', '')
i["file_hot"] = file_nodes[2].replace('\n', '')
i["file_size"] = file_nodes[3].replace('\n', '')
i["file_url"] = response.url
file_link = response.xpath('//*[@id="wall"]/div[1]/div[1]/div[2]/a/@href').extract()
if len(file_link) > 0:
i["file_link"] = file_link[0]
yield i

items的代码

 class BtxxxxItem(scrapy.Item):
file_type = scrapy.Field()
file_createtime = scrapy.Field()
file_hot = scrapy.Field()
file_size = scrapy.Field()
file_count = scrapy.Field()
file_link = scrapy.Field()
file_name = scrapy.Field()
file_url = scrapy.Field()

settings 中添加

FEED_EXPORT_ENCODING = 'utf-8'

并启用  DEFAULT_REQUEST_HEADERS

执行scrapy  (设置要检索的关键字和输出的文件)

scrapy crawl btxxxx  -a key_word=xx -o xx.json

简单的爬数据而已,包含网址信息的代码我都已经在文章中删掉,只做学习使用

转载请标明出自 原文地址

最新文章

  1. btrace使用
  2. IIS 配置Http重定向到Https
  3. 【转】js写显示农历的日期
  4. 对TCP/IP网络协议的深入浅出归纳
  5. mysql分区表的原理和优缺点
  6. 关于BS响应式的网站建设
  7. WINDOWS之入侵痕迹清理总结
  8. 运行测试Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path错误解决
  9. STM32普通定时器实现延时函数
  10. Careercup - Facebook面试题 - 5179916190482432
  11. Microsoft Internet Explorer 内存破坏漏洞(CVE-2013-3193)(MS13-059)
  12. MVC4 成员资格、 身份验证
  13. 【Web】java异常处理
  14. LB 负载均衡的层次结构(转)
  15. nginx跳转
  16. 关于ASP.NET WebAPI中HTTP模型的相关思考
  17. linux 下rabbitmq 安装
  18. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
  19. C Primer Plus 第6章 C控制语句:循环 编程练习
  20. word2vec并行实现小记

热门文章

  1. JavaScript 对象属性底层原理
  2. Intellij idea使用过程中遇到的一些问题
  3. zxing生成二维码和条码
  4. 并发之痛 Thread,Goroutine,Actor
  5. Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)
  6. 通过nginx日志,统计最近两天的交易笔数
  7. mac更新node,npm版本
  8. 批量查杀该死的VBscript “svchost.exe” 脚本挂马
  9. input file禁用手机本地文件选择,只允许拍照上传图片
  10. C# 反射获取属性类型及属性值,两个实体转换