Javascript Scrapy“跟随动态加载的链接”;“加载更多”-按钮
我知道这个问题也曾被类似的方法问过好几次,但我无法理解。这就是我想提出一个具体案例/问题的原因 形势 我抓取了一个显示文章的网站,比如说20篇(但是这个网站有200篇)。我跟随文章链接,在那里我将提取我需要的数据。到目前为止,一切顺利 有些页面似乎有一个加载更多按钮,而不是“正常”分页,以显示超过20篇文章。这就是斗争的开始。我检查了页面(如本文中所述,以那个为例)。但是,单击按钮时请求URL的结构与视频中描述的不同。因为结构将保持不变,而不是加载页面,如?page=8,“page=9”等 单击按钮时,我找到了具有以下请求URL的网站:Javascript Scrapy“跟随动态加载的链接”;“加载更多”-按钮,javascript,python,html,scrapy,scrapy-splash,Javascript,Python,Html,Scrapy,Scrapy Splash,我知道这个问题也曾被类似的方法问过好几次,但我无法理解。这就是我想提出一个具体案例/问题的原因 形势 我抓取了一个显示文章的网站,比如说20篇(但是这个网站有200篇)。我跟随文章链接,在那里我将提取我需要的数据。到目前为止,一切顺利 有些页面似乎有一个加载更多按钮,而不是“正常”分页,以显示超过20篇文章。这就是斗争的开始。我检查了页面(如本文中所述,以那个为例)。但是,单击按钮时请求URL的结构与视频中描述的不同。因为结构将保持不变,而不是加载页面,如?page=8,“page=9”等 单击
一些提示:(1)不要点击X,Y坐标。而是使用查找按钮,然后使用触发单击。它应该更健壮,以防事情发生变化。(2)要从Scrapy启动它,您必须生成一个
SplashRequest
。那是从哪里来的。看一看链接页面上的“运行一个简单的启动Lua脚本”部分。先玩一下这个部分,然后带着特定的问题回来。一些提示:(1)不要点击X,Y坐标。而是使用查找按钮,然后使用触发单击。它应该更健壮,以防事情发生变化。(2)要从Scrapy启动它,您必须生成一个SplashRequest
。那是从哪里来的。看一下链接页面上的“运行一个简单的Splash Lua脚本”部分。先玩一玩,然后带着具体的问题回来。
function main(splash)
assert(splash:go(splash.args.url))
local get_dimensions = splash:jsfunc([[
function () {
var rect = document.getElementById('button').getClientRects()[0];
return {"x": rect.left, "y": rect.top}
}
]])
splash:set_viewport_full()
splash:wait(0.1)
local dimensions = get_dimensions()
splash:mouse_click(dimensions.x, dimensions.y)
-- Wait split second to allow event to propagate.
splash:wait(0.1)
return splash:html()
end
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["example.com"]
start_urls = [
"https://example.com",
]
def parse(self, response):
# follow links to article
for href in response.xpath('//div[@class="article"]/a/@href'):
yield response.follow(href, self.parse_article)
def parse_article(self, response):
def get_with_xpath(query):
return response.xpath(query).get(default='').strip()
yield {
'title': get_with_xpath('//meta[@name="title"]/@content'),
'description': get_with_xpath('//meta[@name="description"]/@content')
}