絮叨一下
这篇博客主要就是爬取糗事百科的所有段子一共10页
然后保存成txt格式文件
新建项目
- 项目名称:qsbk
scrapy startproject qsbk
新建爬虫
- 爬虫名称:qsbk_spider
scrapy genspider qsbk_spider 'qiushibaike.com'
pycharm打开
- qsbk_spider.py
# -*- coding: utf-8 -*-
import scrapy
from qsbk.items import QsbkItem
class QsbdSpiderSpider(scrapy.Spider):
name = 'qsbk_spider'
allowed_domains = ['www.qiushibaike.com']
start_urls = ['https://www.qiushibaike.com/text/page/1']
# 开始的页
def parse(self, response):
duanzidiv = response.xpath("//div[@class = 'col1 old-style-col1']/div")
# xpath不详细说明
for i in duanzidiv:
author = i.xpath('.//h2/text()').get().strip()
# 看6 get获取第一个信息就是作者名称
content = i.xpath('.//div[@class = "content"]//text()').getall()
# 看6 getall获取全部信息就是段子的名称
content = ''.join(content).strip()
# 去掉多余的空格
item = QsbkItem(author=author, content=content)
# QsbkItem对象 调用items
# duanzi = {'author': author, 'content': content}
# 字典形式传递
yield item
# 返回类似如return 这里也可以用列表return
items.py
import scrapy
class QsbkItem(scrapy.Item):
author = scrapy.Field()
content = scrapy.Field()
piplines.py
import json
class QsbkPipeline(object):
def process_item(self, item, spider):
# item_json = json.dumps(item, ensure_ascii=False)
item_txt = json.dumps(dict(item),ensure_ascii=False)
self.fp.write(item_txt + '\n')
return item
def open_spider(self, spider):
self.fp = open('duanzi.txt', 'w', encoding='utf-8')
def close_spider(self, spider):
self.fp.close()
-
优化一下,实现翻页爬取功能
分析一下糗事百科下一页的存放地址在li标签的最后一个没有标签就是结束可以定义判断条件结束
next_url = response.xpath('//ul[@class="pagination"]/li[last()]/a').attrib["href"]
print('*' * 100)
print(next_url)
print('*' * 100)
if not next_url:
return
else:
yield scrapy.Request(self.base_url + next_url)
写给看到最后的你
感谢你能看到最后,我想这便是给创作者的莫大鼓励
公众号:Linux下撸python
期待和你再次相遇
愿你学的愉快