本人非常喜欢python 这门语言,python有这丰富的库,安装/卸载库也非常简单
pip install xxx ,卸载 pip uninstall xxx,言归正传。
scrapy 官网网址:
http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html
第一步我们安装一下scrapy:
pip install scrapy
scrapy -h 看一下scrapy基本的命令
第二步我们创建一个tutorial项目
scrapy startproject tutorial
查看一下创建好的目录结构
这些文件分别是:
scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。之后您将在此加入代码。
tutorial/items.py: 项目中的item文件.
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.
tutorial/spiders/: 放置spider代码的目录.
第三步我们在tutorial/items.py添加如下内容:
```
import scrapy
from scrapy.item import Item, Field
class QQNews(scrapy.Item):
title = Field()
content = Field()
```
Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。简单点就是我们存储爬取到的数据的字段。
第四步,我们编写爬虫脚本
vim tutorial/spiders/qqNewsSpider.py
# -*-coding: utf-8 -*-
#author:Smile
#data:2018-01-10
#description:this program just to get qq news,we'll get the news title and content
import sys, os
reload(sys)
from scrapy.spider import Spider
from tutorial.items import QQNews
from scrapy.http import Request
from scrapy.selector import Selector
class QQNewsSpider(Spider):
name = 'qq_news'
allow_domain = 'http://new.qq.com/'
start_urls= ["http://mil.qq.com/mil_index.htm"]
def parse(self,response):
news_urls = Selector(response)
for start_url in news_urls.xpath('//a[@class=\"pic\"]/@href').extract():
yield Request(url="http:"+start_url,callback=self.second_parse)
def second_parse(self,response):
detail_sel = Selector(response)
content = ""
item = QQNews()
item['title'] = detail_sel.xpath('//div[@class=\"LEFT\"]/h1/text()').extract()
item['content'] = ''.join(detail_sel.xpath('//div[@class=\"content-article\"]/p/text()').extract())
yield item
第五步对数据进行处理,我是直接写txt文档的
修改 tutorial/pipelines.py
from scrapy import signals
import json
import codecs
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class QQNewsPipeline(object):
def process_item(self, item, spider):
if not item['title']:
return item
file_name = item['title'][0] + ".txt"
fp = open("/Users/admin/Desktop/data/"+file_name, 'w')
fp.write(item['content'])
fp.close()
return item
第六步,修改配置文件
BOT_NAME = 'tutorial'
SPIDER_MODULES = ['tutorial.spiders']
NEWSPIDER_MODULE = 'tutorial.spiders'
LOG_LEVEL = 'INFO'
ROBOTSTXT_OBEY = True
最后一步,也是最牛逼的一步运行脚本
scrapy crawl qq_news