我正在尝试使用 scrapy 和splash 抓取网站。 我想从图像中出现的响应中抓取特定的 html 代码。 这是带有标题的响应:
这是响应(我想要抓取的html):
我可以使用检查工具找到该 HTML。我的代码返回的是我可以使用“查看页面源代码”工具看到的html。所以,这意味着 Javascript 在嵌入代码之前修改代码。但是,splash 的作用是运行 javascript 并返回 HTML,不是吗? response.body 返回页面的源代码,而不包含我上面提到的响应中需要的 html 代码。
import scrapy
from scrapy_splash import SplashRequest
from bs4 import BeautifulSoup
class NetherSplashSpider(scrapy.Spider):
name = 'nether_splash'
download_delay = 10
custom_settings = {
'SPLASH_URL': 'http://localhost:8050',
'DOWNLOADER_MIDDLEWARES': {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
},
'SPIDER_MIDDLEWARES': {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
},
'DUPEFILTER_CLASS': 'scrapy_splash.SplashAwareDupeFilter',
}
def start_requests(self):
yield SplashRequest(
url='https://www.gaslicht.com/stroom-vergelijken?partial=true&aanbieders=eneco&skip=0&take=10&_=1559207102962',
callback=self.parse,
)
def parse(self, response):
filename = 'splash.html'
with open(filename, 'wb') as f:
f.write(response.body)
为了加载整个页面,您需要添加“等待”参数。 尝试将“args={'wait': 1.0}”添加到您的 SplashRequest 中。
yield SplashRequest(
url='https://www.gaslicht.com/stroom-vergelijken?partial=true&aanbieders=eneco&skip=0&take=10&_=1559207102962',
callback=self.parse, args={'wait': 1.0}
)