scrapy-splash解析javascript
所有代码均在ubuntu16.04,python3下通过
1、不使用scrapy-splash
比如我想爬取该人物关注了哪些贴吧,
但是这些内容是javascript解析的:
以在贴吧的人物主页爬取为例,在spider.py文件里面输入下面的内容。
import scrapy
class Spider(scrapy.Spider):
name = 'tieba'
allowed_domains = []
start_urls = ["https://www.baidu.com/p/%CE%E5%D0%D0%C1%A6%D1%A7%B4%B4%CA%BC%C8%CB?from=tieba"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self,response):
print("xxx" * 50)
print(response.xpath('//*[@id="1000003"]/ul/li[1]/a/div[4]/text()').extract())
print("xxx" * 50)
你会看到这样的信息:
2、使用scrapy-splash
在settings.py文件中,你需要额外的填写下面的一些内容
# 添加splash渲染服务
SPLASH_URL = 'http://ip地址:端口号' # 这里需要填写你的ip地址
# 下载器中间件
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
# 去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
# 使用Splash的Http缓存
HTTPCACHE_STOPAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
在spider.py文件中,填入下面的代码:
import scrapy
from scrapy_splash import SplashRequest # 导入scrapy_splash包
class TiebaSpider(scrapy.Spider):
name = 'tieba'
allowed_domains = []
start_urls = ["https://www.baidu.com/p/%CE%E5%D0%D0%C1%A6%D1%A7%B4%B4%CA%BC%C8%CB?from=tieba"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url, callback=self.parse, args={'wait':1}, endpoint='render.html') # 配置requsts
def parse(self, response):
print("xxx" * 50)
print(response.xpath('//*[@id="1000003"]/ul/li[1]/a/div[4]/text()').extract())
print("xxx" * 50)
下面就是运行这个项目,记得在docker里面先把splash渲染服务运行起来。
结果如下图所示。