Python爬虫实战之利用Scrapy框架爬取糗事百科段子

糗事百科网址https://www.qiushibaike.com/text/

# -*- coding: utf-8 -*-
import scrapy
import re

class QsbkSpiderSpider(scrapy.Spider):
    name = 'qsbk_spider'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/page/1/']
    base_domain='https://www.qiushibaike.com'

    def parse(self, response):
        duanzi_divs1=response.xpath("//div[@id='content-left']/div")
        #duanzi_divs=duanzi_divs1.xpath("./div[@class='article block untagged mb15 typs_long']")
        print(len(duanzi_divs1))
        for duanzi_div in duanzi_divs1:

            author=duanzi_div.xpath(".//div[@class='author clearfix']/a/h2/text()").get()#.strip()#.extract_first()
            print(author)
            content=duanzi_div.xpath(".//div[@class='content']/span/text()").getall()#.extract_first()
            content=''.join(content)
            print(content)
            duanzi = {'author': author, 'content': content}
            yield duanzi
		##控制页数 
	next_url=response.xpath("//ul[@class='pagination']/li[last()]/a/@href").get()
        if not next_url:
            return
        else:
            yield scrapy.Request(self.base_domain+next_url,callback=self.parse)
		#测试
        #content = .xpath("//div[@class='col1']//a[@class='contentHerf']/div[@class='content']/span/text()").getall()
        #links = response.xpath("//div[@id='content-left']/div/a/@href").extract()
        ##links = 'https://www.qiushibaike.com' + links
        #author=response.xpath("//div[@id='content-left']/div/div//h2/text()").get().strip()#.extract()

        #print(content)
        #print(len(content))
        #print(links)
        #print(author)
        #content
        #content=self.clear_span_br(content)
        #for i in range(len(author)):
        #    content[i] = ''.join(content[i]).strip()
        #    author[i] = ''.join(author[i]).strip()
        #    duanzi={'author':author[i],'content':content[i]}
        #    print(content[i])
        #    print(author[i])
        #yield duanzi
#

pipelines.py文件

import json
from scrapy.exporters import JsonItemExporter,JsonLinesItemExporter
#class QsbkPipeline(object):
#    def __init__(self):
#        self.fp=open('duanzi.josn','wb')
#        self.exporter=JsonItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
#        self.exporter.start_exporting()##开始导入
#    def open_spider(self,spider):
#        print('爬虫开始')
#    def process_item(self, item, spider):
#        self.exporter.export_item(item)
#        return item
#    def close_spider(self,spider):
#        self.exporter.finish_exporting()
#        self.fp.close()
#        print('爬虫结束')

class QsbkPipeline(object):
    def __init__(self):
        self.fp=open('duanzi.josn','wb')
        self.exporter=JsonItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
        self.exporter.start_exporting()##开始导入
    def open_spider(self,spider):
        print('爬虫开始')
    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item
    def close_spider(self,spider):
        self.exporter.finish_exporting()
        self.fp.close()
        print('爬虫结束')

查看json文件:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用PythonScrapy框架可以非常方便地爬取豆瓣电影的数据。下面是一个简单示例: 首先,我们需要创建一个新的Scrapy项目。在命令行中执行以下命令: ``` scrapy startproject douban_movies ``` 接下来,进入项目目录: ``` cd douban_movies ``` 然后,我们可以创建一个名为`movies`的Spider来定义我们想要爬取的网页和处理数据的逻辑。在项目目录下执行以下命令: ``` scrapy genspider movies movie.douban.com ``` 这会在`spiders`目录下生成一个名为`movies.py`的文件。我们可以在这个文件中编写爬虫代码。 首先,我们需要定义要爬取的网址,在`start_urls`中添加豆瓣电影的首页地址: ```python start_urls = ['https://movie.douban.com/'] ``` 然后,我们需要定义如何解析网页和提取数据。我们可以使用XPath或CSS选择器来定位需要的数据。这里以使用XPath为例: ```python def parse(self, response): # 提取电影名字 movie_names = response.xpath('//div[@class="hd"]/a/span/text()').extract() for name in movie_names: print(name) # 提取评分 scores = response.xpath('//span[@class="rating_num"]/text()').extract() for score in scores: print(score) ``` 在上面的代码中,我们使用XPath选择器来提取电影的名字和评分,并打印出来。你可以根据需要修改这部分代码,比如将数据保存到数据库或文件中。 最后,在命令行中执行以下命令来运行爬虫: ``` scrapy crawl movies ``` 以上就是使用PythonScrapy框架爬取豆瓣电影的简单示例。你可以根据自己的需求进一步扩展和优化这个爬虫,比如添加翻页功能或处理更复杂的网页结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值