scrapy 第一只刮毛爬虫

fcwjkofz  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(104)

我已经学习了一些关于数据营的课程,阅读了一些零碎的文档。我已经试着制作了我的第一个蜘蛛。
它应该在www.example.com的第一页上刮取课程名称datacamp.com,然后保存到与脚本所在的同一文件夹中的links.csv文件中(在桌面上)。
不太像我想的那样。如果能帮我做错什么,我会感激不尽。

import scrapy
from scrapy.crawler import CrawlerProcess

class DC (scrapy.Spider):
    name = "DC"

def start_requests(self):
    urls = ['https://app.datacamp.com/learn/courses']
    for url in urls:
        yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    links = response.xpath('//h2[contains(@class,"mfe-app-learn-hub-1tu8i8n")/text()]').extract()
    filename = f'links.csv'
    with open(filename, 'wb') as f:
        f.writelines([link + '/n' for link in links])

process = CrawlerProcess()
process.crawl(DC)
process.start()
pepwfjgg

pepwfjgg1#

首先,起始网址是一个糟糕的选择--你的蜘蛛被重定向到登录页面,网站只会在你登录后返回你正在寻找的内容。
我建议从以下网站开始:https://books.toscrape.com/
如果您只在start_requests()函数中使用默认行为(您这样做了),则可以设置为start_urls = ['https://app.datacamp.com/learn/courses']
您的xpath选择器实际上并没有提取链接--它没有提到任何属性。
.extract()方法已过时,请改用.get()(docs)。
从parse函数创建文件是个坏主意--你会在同一次运行中多次创建同一个文件。相反,你应该生成如下的项:

def parse(self, response):
    links = response.xpath('//h2[contains(@class,"mfe-app-learn-hub-1tu8i8n")/text()]').getall()
    for link in links:
        yield {"link": link}

类名和spider名称不明确。如果更新它们,代码应如下所示:

import scrapy

class DataCampSpider (scrapy.Spider):
    name = "datacamp"
    start_urls = ['https://app.datacamp.com/learn/courses']

    def parse(self, response):
        links = response.xpath('//h2[contains(@class,"mfe-app-learn-hub-1tu8i8n")/text()]').getall()
        for link in links:
            yield {"link": link}

在终端scrapy crawl datacamp -o datacamp_links.csv(docs)中使用此命令运行spider并将输出写入文件。

相关问题