我已经学习了一些关于数据营的课程,阅读了一些零碎的文档。我已经试着制作了我的第一个蜘蛛。
它应该在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()
1条答案
按热度按时间pepwfjgg1#
首先,起始网址是一个糟糕的选择--你的蜘蛛被重定向到登录页面,网站只会在你登录后返回你正在寻找的内容。
我建议从以下网站开始:https://books.toscrape.com/
如果您只在
start_requests()
函数中使用默认行为(您这样做了),则可以设置为start_urls = ['https://app.datacamp.com/learn/courses']
您的xpath选择器实际上并没有提取链接--它没有提到任何属性。
.extract()
方法已过时,请改用.get()
(docs)。从parse函数创建文件是个坏主意--你会在同一次运行中多次创建同一个文件。相反,你应该生成如下的项:
类名和spider名称不明确。如果更新它们,代码应如下所示:
在终端
scrapy crawl datacamp -o datacamp_links.csv
(docs)中使用此命令运行spider并将输出写入文件。