目前还是简单的爬取数据,目前的数据不完全, 个人目前相当于做个笔记,可简单的做个参看。
一、创建爬虫项目
scrapy startproject ITtest
startproject #开始创建项目
ITtest01 #创建项目名
二、生成爬虫
cd qiushi/qiushi/spiders && scrapy genspider ITtest www.qiushibaike.com/text/page/1
cat ITtest.py
上面说到url地址,现在说明分析下:
1、访问第二页
2、接着url路由将2改成1试试
三、配置爬虫文件
vim settings.py
BOT_NAME = 'qiushi'
SPIDER_MODULES = ['qiushi.spiders']
NEWSPIDER_MODULE = 'qiushi.spiders'
ROBOTSTXT_OBEY = False #不遵守robots 协议
CONCURRENT_REQUESTS = 3 #隔3s爬取一次(正常普通网友点击全部页面的话3分钟)
COOKIES_ENABLED = False
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' #模拟用户浏览器的型号
}
ITEM_PIPELINES = {
'qiushi.pipelines.QiushiPipeline': 300, #优先级
}
四、自定义item字段
vim items.py
五、编写爬虫文件
vim ITtest.py
import scrapy
from qiushi.items import QiushiItem #导入糗事项目下items中QiushiItem函数
from scrapy.http.response.html import HtmlResponse #导入HtmlXPathSelector模块
from scrapy.selector.unified import SelectorList #导入SelectorList模块
class IttestSpider(scrapy.Spider):
name = 'ITtest'
allowed_domains = ['www.qiushibaike.com']
start_urls = ['https://www.qiushibaike.com/text/page/1/']
bash_domain = "https://www.qiushibaike.com"
def parse(self, response):
body = response.xpath('//div[@class="col1 old-style-col1"]/div')
for duanzhi in body:
touxiang = duanzhi.xpath('.//div//@src').get()
neirong = duanzhi.xpath('.//div[@class="content"]//text()').getall()
neirong = "".join(neirong).strip()
zuozhe = duanzhi.xpath('.//div//h2/text()').get().strip()
item = QiushiItem(头像=touxiang,作者=zuozhe,内容=neirong)
yield item
next_url = response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()
if not next_url:
return
else:
yield scrapy.Request(self.bash_domain+next_url,callback=self.parse)
六、检查爬虫语法
scrapy check ITtest
七、执行爬虫脚本
scrapy crawl ITtest
八、数据处理储存
vim pipelines.py
from itemadapter import ItemAdapter
import json
class QiushiPipeline:
def __init__(self):
#open自动判断是否有文件有则不进行创建。w写入,字符编码中文
self.fp = open("qiushi.json","w",encoding='utf-8')
def process_item(self, item, spider):
print("爬虫开始")
def process_item(self, item, spider):
#json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
#item_json = json.dumps(item,ensure_ascii=False)
item_json = json.dumps(dict(item),ensure_ascii=False)
self.fp.write(item_json+'\n')
return item
def close_spider(self,spider):
#关闭文件流
self.fp.close()
print("爬虫结束了")
九、再次执行
scrapy crawl ITtest
cat qiushi.json -n
我们随便哪一个头像的url访问试试
后期规划,目前只是入门的爬虫还需要优化,后期将使用mongodb、redis作为缓存与存储,当爬虫脚本多起来将制作成docker镜像放入k8s中保证服务的稳定。