十.scrapy项目 爬取主页http://cuiqingcai.com/获取所有url与title

Scrapy爬虫实战
本文介绍使用Scrapy框架配合CrawlSpider进行网站爬取的方法,包括URL规则匹配、数据解析及存储过程。通过实例展示了如何定义爬虫规则、提取所需信息并保存到MongoDB数据库。

一.分析采用crawlspider,利用rule规则提取url,并且follow=True追踪下去

rules = (
    Rule(LinkExtractor(allow=('\d+\.html$',)), callback='parse_all', follow=True),
    # Rule(LinkExtractor(allow=('\d+\.html$',)), callback='parse_pachong', follow=True),
   )

二.spider为

#coding:utf-8
from scrapy.spiders import CrawlSpider, Rule, Request
from scrapy.linkextractors import LinkExtractor
from ..items import CuiqingcaiItem


class myspider(CrawlSpider):
    name = 'cqc'
    allowed_domains = ['cuiqingcai.com']
    count_all = 0
    url_all = []
    start_urls = ['http://cuiqingcai.com']
    label_tags = [u'爬虫', 'scrapy', 'selenium']

    rules = (
        Rule(LinkExtractor(allow=('\d+\.html$',)), callback='parse_all', follow=True),
        # Rule(LinkExtractor(allow=('\d+\.html$',)), callback='parse_pachong', follow=True),
    )
    '''
    # 将爬虫相关的数据存入数据库
    def parse_pachong(self, response):
        print_tag = False
        title_name = u""
        for tag in self.label_tags:
            title_name = response.xpath('//header/h1[1][@class="article-title"]/a/text()').extract()[0]
            if tag in title_name.lower().encode("utf-8"):
                print_tag = True
        if print_tag == True:
            self.count_all = self.count_all + 1
            self.url_all.append(response.url)
            item = CuiqingcaiItem()
            item['url'] = response.url
            item['title'] = title_name.encode("utf-8")
            return item
    '''
    # 将全站数据存入json文件
    def parse_all(self, response):
        title_name = None
        if response.xpath('//header/h1[1][@class="article-title"]/a/text()').extract()[0]:
            title_name = response.xpath('//header/h1[1][@class="article-title"]/a/text()').extract()[0]
        item = CuiqingcaiItem()
        item['url'] = response.url
        item['title'] = title_name
        return item

三.pipelines为

import json
from pymongo import MongoClient
import settings
from items import CuiqingcaiItem

class CuiqingcaiPipeline(object):
    def __init__(self):
        cn=MongoClient('127.0.0.1',27017)
        db=cn[settings.Mongodb_DBNAME]
        self.table=db[settings.Mongodb_DBTable]
    def process_item(self, item, spider):
        if isinstance(item,CuiqingcaiItem):
            try:
                self.table.insert(dict(item))
            except Exception, e:
                pass
            return item

四.item为

import scrapy


class CuiqingcaiItem(scrapy.Item):

    title = scrapy.Field()  # 标题
    url = scrapy.Field()  # 页面的地址

<think>好的,用户想使用Scrapy框架爬取sc.zdic.net网站下tang目录的唐诗内容。首先,我需要回忆一下Scrapy的基本操作步骤,然后结合用户提供的引用内容,看看是否有现成的例子可以参考。 根据引用[1]、[3]、[4],创建Scrapy项目的命令都是使用scrapy startproject projectname,所以用户需要先在命令行中进入目标文件夹,执行这个命令生成项目结构。然后,创建Spider的时候,可以使用scrapy genspider命令,或者手动在spiders目录下新建Python文件,比如引用[4]中的例子就是手动编写item.py和Spider。 接下来,用户的目标网站是sc.zdic.net/tang,需要分析这个页面的结构。假设唐诗列表页的URL结构可能是http://sc.zdic.net/tang/page/1这样的分页形式,或者有其他规律。用户需要检查该网站的页面结构,确定如何提取标题、作者、正文等信息。可能需要用到XPath或CSS选择器,如引用[3]提到的Xpath相关知识。 然后,编写Item,定义需要爬取的字段,如标题、作者、内容等,这部分可以参考引用[4]中的QuoteItem类,定义相应的scrapy.Field()。 在Spider中,需要编写start_requests方法生成请求,解析函数parse处理响应,提取数据并生成Item。可能需要处理分页,比如在parse中解析下一页链接并调度新的请求。 存储部分,用户可能需要将数据保存到数据库或文件,如引用[1]提到保存到MySQL,引用[2]保存为csv。用户可以根据需求选择管道,比如使用内置的Feed导出为JSON或CSV,或者编写自定义管道连接数据库。 还需要注意遵守网站的robots.txt,设置合理的下载延迟,避免给服务器造成压力。可能需要配置User-Agent,处理可能的反爬机制。 最后,测试爬虫,运行scrapy crawl spidername,检查是否正常抓取数据,是否有遗漏或错误。可能需要调整选择器或处理动态加载的内容,如果页面是动态生成的,可能需要使用Splash或Scrapy-Selenium等工具。 总结步骤:创建项目、定义Item、编写Spider、配置管道、处理分页、存储数据、测试运行。过程中需要参考用户提供的引用中的类似案例,确保语法正确,并处理可能遇到的问题,比如页面结构变化或反爬措施。</think>### 分步解答 #### 步骤1:创建Scrapy项目 打开命令行工具,执行以下命令创建项目: ```bash scrapy startproject tangshi cd tangshi ``` 项目结构将包含`spiders`文件夹、`items.py`、`settings.py`等文件[^3][^4]。 #### 步骤2:定义数据模板(Item) 在`items.py`中定义需要爬取的字段: ```python import scrapy class TangshiItem(scrapy.Item): title = scrapy.Field() # 诗标题 author = scrapy.Field() # 作者 content = scrapy.Field() # 诗文内容 dynasty = scrapy.Field() # 朝代(固定为"唐") ``` #### 步骤3:创建Spider 新建`tang_spider.py`在`spiders`目录下: ```python import scrapy from tangshi.items import TangshiItem class TangSpider(scrapy.Spider): name = "tang" allowed_domains = ["sc.zdic.net"] # 设置起始URL(示例,需确认实际分页规则) start_urls = [ "http://sc.zdic.net/tang/list_1.html" ] def parse(self, response): # 提取诗歌列表页链接 for poem_link in response.css('div.poem-list a::attr(href)').getall(): yield response.follow(poem_link, self.parse_poem) # 处理分页(示例选择器) next_page = response.css('a.next-page::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) def parse_poem(self, response): item = TangshiItem() item["title"] = response.css("h1.title::text").get() item["author"] = response.xpath('//div[@class="author"]/text()').get() item["content"] = "".join(response.css('div.content p::text').getall()) item["dynasty"] = "唐" yield item ``` #### 步骤4:配置存储方式 在`settings.py`中启用并配置管道(以JSON存储为例): ```python ITEM_PIPELINES = { 'tangshi.pipelines.TangshiPipeline': 300, } FEED_FORMAT = 'json' FEED_URI = 'tangshi.json' ``` #### 步骤5:执行爬虫 ```bash scrapy crawl tang ``` 数据将保存到`tangshi.json`文件,格式示例: ```json { "title": "静夜思", "author": "李白", "content": "床前明月光...", "dynasty": "唐" } ``` §§ 1. 需先确认目标网站的分页规则和DOM结构,调整选择器 2. 建议设置`DOWNLOAD_DELAY`防止被封禁 3. 若需要数据库存储,可参考MySQL管道实现[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值