”python爬虫系列“目录:
scrapy中的get请求及基本使用:
1. 创建scrapy项目
scrapy startproject QiuBaiProject
2. 创建爬虫文件
scrapy genspider QiuBai www.qiubai.com
3.修改配置文件
"""
setting.py :配置文件
"""
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
#使用哪个管道处理,后面是管道优先级 1-1000,数字越低,优先级越高
'qiubaiproject.pipelines.QiubaiprojectPipeline': 300,
}
"""
关于日志的说明:默认显示的等级是DEBUG,上面所有的信息全部显示
如果等级配置为ERROR,那么就只显示ERROR,CRITICAL
在配置文件中进行配置
"""
# 配置显示日志信息等级
# LOG_LEVEL = 'ERROR'
# 不将信息显示到屏幕中,将信息显示到文件中
LOG_FILE = 'log.txt'
4. 编写item.py文件
"""
items.py : 这里面是定义数据结构的地方
"""
import scrapy
class QiubaiprojectItem(scrapy.Item):
"""
item对象的用法和字典的用法一模一样,可以快速的转化为字典
"""
# define the fields for your item here like:
# name = scrapy.Field()
# 图片链接
image_src = scrapy.Field()
# 用户名
name = scrapy.Field()
# 年龄
age = scrapy.Field()
# 内容
content = scrapy.Field()
# 好笑个数
haha_count = scrapy.Field()
# 评论个数
ping_count = scrapy.Field()
5. 编写爬虫文件
# -*- coding: utf-8 -*-
'''
QiuBai.py 爬虫文件
'''
import scrapy
from qiubaiproject.items import QiubaiprojectItem
class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ['www.qiushibaike.com']
#起始页
start_urls = ['http://www.qiushibaike.com/']
# 爬取其他页面的内容
url = 'https://www.qiushibaike.com/8hr/page/{}/'
page = 1
def parse(self, response):
# 先找到所有的div
div_list = response.xpath('//div[@id="content-left"]/div')
# 遍历这个div的列表,依次获取里面的每一条信息
for odiv in div_list:
# 创建对象
item = QiubaiprojectItem()
# 用户头像
face = 'https:' + odiv.xpath('.//div[1]//img/@src')[0].extract()
# 用户的名字
name = odiv.xpath('.//div[1]//h2').extract()[0]
# 用户的年龄
age = odiv.xpath('.//div[starts-with(@class,"articleGender")]').extract_first()
# 获取用户内容
ospan = odiv.xpath('.//div[@class="content"]/span[1]')[0]
content = ospan.xpath('string(.)').extract()
# 用户的好笑个数
haha_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-vote"]/i/text()').extract()[0]
# 获取评论个数
ping_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-comments"]//i/text()').extract()[0]
# 将提取的信息保存起来
item['image_src'] = face
item['name'] = name
item['age'] = age
item['content'] = content
item['haha_count'] = haha_count
item['ping_count'] = ping_count
yield item
# 接着爬取其他的页面
if self.page <= 5:
self.page += 1
# 拼接出来指定的url
url = self.url.format(self.page)
# 接着发送请求,callback是发送请求之后,用哪一个回调函数处理这个请求
yield scrapy.Request(url=url, callback=self.parse)
6.编写管道文件
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
class QiubaiprojectPipeline(object):
# 爬虫启动的时候只会调用一次
def open_spider(self, spider):
# 将文件的打开写道这里
self.fp = open('qiubai.json', 'w', encoding='utf8')
# 这个函数就是处理item的函数,每一个item过来都会回调这个方法
def process_item(self, item, spider):
# 将对象转化为字典
obj = dict(item)
# 将字典转化为json格式字符串
string = json.dumps(obj, ensure_ascii=False)
self.fp.write(string + '\n')
return item
# 爬虫结束的时候回调这个方法
def close_spider(self, spider):
self.fp.close()