创建scrapy项目_项目构建是什么意思

创建scrapy项目_项目构建是什么意思构建项目:scrapystartprojecttaobao创建一个爬虫:scrapygenspider爬虫名称要爬取的限制域

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

构建项目:

scrapy startproject taobao

pycharm打开项目。

在项目根路径创建一个爬虫:

scrapy genspider 爬虫名称 要爬取的限制域

创建scrapy项目_项目构建是什么意思调试工具:

scrapy shell http://www.taobao.com
#选择<title>标签(也可以class),::取标签值,extract提取数据,first指第一个,等价于extract[0]
response.css('title::text').extract_first()

启动项目:

scrapy crawl quotes

pycharm断点调试:

在根路径下新建文件main.py,内容如下:修改下爬虫名称即可

from scrapy.cmdline import execute
import os
import sys

if __name__ == '__main__':
    sys.path.append(os.path.dirname(os.path.abspath(__file__)))
    execute(['scrapy', 'crawl', '爬虫name'])

爬虫如下:

爬虫文件:

import scrapy
from ..items import MyscrapyItem


# 定义爬取逻辑
class QuotesSpider(scrapy.Spider):
    # 爬虫名称
    name = 'quotes'
    # 允许的域
    allowed_domains = ['lab.scrapyd.cn']
    # 初始url集合
    start_urls = ['http://lab.scrapyd.cn/page/1/']

    # 处理response的方法
    def parse(self, response):
        # 用css选择器、获取所有的quote节点
        quotes = response.css('div.quote')
        # 遍历节点集
        for quote in quotes:
            item = MyscrapyItem()
            item["text"] = quote.css('span.text::text').extract_first()
            item["author"] = quote.css('span small.author::text').extract_first()
            item["tags"] = quote.css('div.tags a.tag::text').extract()
            yield item
        # 如果存在下一页则继续递归爬取
        next_page = response.css('.next a::attr(href)').extract_first()
        if next_page is not None:
            yield scrapy.Request(next_page, callback=self.parse)

item文件:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class MyscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 定义爬取的数据字段
    text = scrapy.Field()
    author = scrapy.Field()
    tags = scrapy.Field()
    pass

pipelines:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class MyscrapyPipeline:
    def process_item(self, item, spider):
        # 处理爬取的结果
        print(item)

要激活pipelines还需要修改一下settings.py

将这一段注释释放掉

ITEM_PIPELINES = {
   'myscrapy.pipelines.MyscrapyPipeline': 300,
}

注意xpath的使用:

    def parse(self, response, **kwargs):
        # 使用绝对路径定位标签
        elements = response.xpath('//div[@class="ui relaxed divided items explore-repo__list"]//div[@class="item"]')
        for element in elements:
            # 注意:再次进行xpath的时候是相对路径在需要//前面加上.。是.//而不是//
            link = self.allow_domains + element.xpath('.//h3/a/@href').get()
            print(link)
        pass

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197146.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM类加载机制详解(一)JVM类加载过程[通俗易懂]

    JVM类加载机制详解(一)JVM类加载过程[通俗易懂]首先Throws(抛出)几个自己学习过程中一直疑惑的问题:1、什么是类加载?类加载的时机?2、什么是类初始化?什么时候进行类初始化?3、什么时候会为变量分配内存?4、什么时候会为变量赋默认初值?什么时候会为变量赋人为设定的初值?5、类加载器是什么?6、如何编写一个自定义的类加载器?首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*

    2022年5月23日
  • Linux安装mariadb_sql数据库安装失败

    Linux安装mariadb_sql数据库安装失败1.下载MariaDB数据库测试:当前虚拟机是否可以正确的链接外网.命令:[root@localhostsrc]#yuminstallmariadb-server2确认下载3安装完成提示4数据库启动命令: 1.启动命令[root@localhostsrc]#systemctlstartmariadb 2.重启命令[root@localhostsrc]#systemctlrestartmariadb 3.

    2022年10月17日
  • pod Evicted的状态究竟是何人所为

    pod Evicted的状态究竟是何人所为微信公众号:运维开发故事,作者:姜总背景今天发现好多pod的状态都是Evicted,然后我没有监控的权限,本来想看看grafana上监控图是否出现了特殊情况,无奈没权限看。因为我发现pod出现大量的Evicted状态的时候,查看pod所在的node节点,距离当时发生Evicted的时间已经是7小时之久了。因此可能会存在一种原因:发生了Evicted的时候的确磁盘已经超过默认的kubelet的资源预留参数了。但是问题发生后,触发了阈值,已经回收了磁盘空间,导致我看的时候磁盘空间已经恢复。在每个K.

    2022年5月13日
  • 【C#】后台线程IsBackground「建议收藏」

    【C#】后台线程IsBackground「建议收藏」简单点来说:C#中的线程分前台线程和后台线程。对于前台线程来说,如果这些线程不退出,则主线程无法退出,则整个进程也无法退出。会造成即使界面窗口关掉了,但是进程管理器里还有该程序。因此,在关闭窗口时,需要编程显示的把这些前台线程关掉才行。但是,这样就会带来个问题,需要记录这些前台线程的实例才行,很不方便。为此,可以把线程定义为后台线程。后台线程与前台线程的唯一区别就是:后台线程不需要主动关闭。当所有前台线程都退出以后,主线程会自动的关掉后台线程,然后让进程退出。定义线程为后台线程的方法为:Thr

    2022年10月16日
  • Fastai安装_fastai

    Fastai安装_fastai本文为译文,主要介绍安装问题。Fastaigithub原文地址:https://github.com/fastai/fastai/blob/master/README.md#is-my-system-supported注意事项:fastaiv1目前只支持Linux,并且需要PyTorchv1和Python3.6或更高版本。Windows还处于试验阶段:应该可以很好地工作,但还没有全面的测…

    2022年9月8日
  • Android图片裁剪之自由裁剪

    Android图片裁剪之自由裁剪

    2021年12月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号