问题标签 [scrapy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Scrapy make_requests_from_url(url)
在 Scrapy 教程中有 BaseSpider 的这个方法:
一种接收 URL 并返回请求对象(或请求对象列表)以进行抓取的方法。
该方法用于构造 start_requests() 方法中的初始请求,通常用于将 url 转换为请求。
除非被覆盖,否则此方法会返回带有 parse() 方法作为其回调函数的请求,并启用 dont_filter 参数(有关更多信息,请参阅请求类)。
你明白这个方法的作用吗?我可以使用 makerequestsfrom_url 和 BaseSpider 代替不适合我的 SgmlLinkExtractor 和 CrawlSpider 吗?
我试图抓取的不仅仅是给定的初始 url,而 Scrapy 没有这样做。
谢谢
python - Scrapy SgmlLinkExtractor 忽略允许的链接
请查看 Scrapy 文档中的这个蜘蛛示例。解释是:
该蜘蛛将开始爬取 example.com 的主页,收集类别链接和项目链接,并使用 parse_item 方法解析后者。对于每个项目响应,将使用 XPath 从 HTML 中提取一些数据,并用它填充一个项目。
我完全复制了同一个蜘蛛,并用另一个初始网址替换了“example.com”。
但是我的蜘蛛“stb”没有像它应该做的那样从“/bios/”收集链接。它运行初始 url,抓取item['JD']
并写入文件,然后退出。
为什么会SgmlLinkExtractor
被忽略?被Rule
读取是因为它捕获了Rule
行内的语法错误。
这是一个错误吗?我的代码有问题吗?除了我在每次运行时看到的一堆未处理的错误外,没有任何错误。
很高兴知道我在这里做错了什么。感谢您提供任何线索。我误解了SgmlLinkExtractor
应该做什么吗?
python - 如何使用 Scrapy 从数据库中删除过期项目
我正在使用爬取内容频繁过期的视频网站。我正在考虑使用 scrapy进行爬虫,但不确定如何删除过期项目。
检测项目是否过期的策略是:
- 蜘蛛网站的“delete.rss”。
- 每隔几天,尝试重新加载内容页面并确保它仍然有效。
- 爬取网站内容索引的每一页,如果没有找到视频,则将其删除。
请让我知道如何删除scrapy中的过期项目。我将通过 django 将我的 scrapy 项目存储在 mysql DB 中。
2010-01-18 更新
我找到了一个可行的解决方案,但仍然可能不是最佳的。我在我同步的每个视频上都维护一个“found_in_last_scan”标志。当蜘蛛启动时,它将所有标志设置为 False。完成后,它会删除仍将标志设置为 False 的视频。我通过附加来做到这一点signals.spider_opened
,signals.spider_closed
请确认这是一个有效的策略并且没有问题。
python - 如何构建一个基于 Scrapy 的网络爬虫永远运行?
我想建立一个基于 Scrapy 的网络爬虫,从几个新闻门户网站抓取新闻图片。我希望这个爬虫是:
永远奔跑
意味着它将定期重新访问一些门户页面以获取更新。
安排优先事项。
为不同类型的 URL 赋予不同的优先级。
多线程获取
我已经阅读了 Scrapy 文档,但没有找到与我列出的内容相关的内容(可能是我不够小心)。这里有人知道怎么做吗?或者只是给出一些想法/例子。谢谢!
python - Scrapy 安装:在 $PATH 中找不到可接受的 C 编译器
我正在尝试在 Mac OS X 10.6.2 机器上安装Scrapy ...当我尝试构建依赖模块之一( libxml2 )
我收到以下错误:
我假设我需要 gcc 编译器……在 10.6 上安装这么容易吗?是否有某种我应该安装的包,以免像在 Python 中安装模块那样被挂断?
python - 对多个网站使用一个 Scrapy 蜘蛛
我需要创建一个用户可配置的网络蜘蛛/爬虫,我正在考虑使用 Scrapy。但是,我不能硬编码域和允许的 URL regex:es——这将在 GUI 中进行配置。
我如何(尽可能简单)使用 Scrapy 创建一个蜘蛛或一组蜘蛛,其中域和允许的 URL regex:es 是动态可配置的?例如,我将配置写入文件,然后蜘蛛以某种方式读取它。
javascript - 如何使用scrapy中的CrawlSpider单击带有javascript onclick的链接?
我希望 scrapy 抓取进入下一个链接的页面,如下所示:
scrapy 能够解释其中的 javascript 代码吗?
通过livehttpheaders扩展,我发现单击 Next 会生成一个 POST,其中包含一个非常大的“垃圾”,如下所示:
我正在尝试在CrawlSpider
该类上构建我的蜘蛛,但我无法真正弄清楚如何对其进行编码,BaseSpider
我使用该parse()
方法来处理第一个 URL,这恰好是一个登录表单,我在其中进行了 POST:
然后我定义了 submit_next() 来告诉下一步该做什么。我不知道如何告诉 CrawlSpider 在第一个 URL 上使用哪种方法?
我爬的所有请求,除了第一个,都是 POST 请求。他们交替使用两种类型的请求:粘贴一些数据,然后单击“下一步”转到下一页。
python - 使用 BeautifulSoup 获取文档 DOCTYPE
我刚刚开始与BeautifulSoup一起修补scrapy ,我想知道我是否遗漏了一些非常明显的东西,但我似乎无法弄清楚如何从生成的汤对象中获取返回的 html 文档的文档类型。
给定以下html:
谁能告诉我是否有一种方法可以使用 BeautifulSoup 从中提取声明的文档类型?
python - 抓取域列表的登录页面
我有一个相当长的网站列表,我想下载它们的登陆(index.html 或等效)页面。我目前正在使用 Scrapy(非常喜欢它背后的人——这是一个很棒的框架)。Scrapy 在此特定任务上的速度比我想要的要慢,我想知道 wget 或其他替代方法是否会更快,因为该任务非常简单。有任何想法吗?
(这就是我用 Scrapy 做的事情。我能做些什么来优化这个任务的 scrapy 吗?)
所以,我有一个起始 URL 列表,例如
start_urls=[google.com yahoo.com aol.com]
我从每个响应中抓取文本并将其存储在 xml 中。我需要关闭异地中间件以允许多个域。
Scrapy 按预期工作,但似乎很慢(大约 1000 个一小时或每 4 秒 1 个)。有没有办法通过在运行单个蜘蛛时增加 CONCURRENT_REQUESTS_PER_SPIDER 的数量来加快速度?还要别的吗?