发布时间:2023-02-13 13:00
这是一个scrapy + splash 带cookie请求网站的示例,适用于需要登录且是js渲染的网站抓取。
在方法里,SplashRequest是启动splash的方法,其他你如果是想完成登录操作的话,你可以使用SplashFormRequest方法带参登录。
众所周知,splash可以通过lua进行调用,相比与selenium可以在python里直接写动作代码还是稍微复杂了些,不过lua作为一门脚本语言,学习还是挺平滑的,而且在lua里面你还可以调用js,这给了爬虫很大的可能性。
import scrapy
from scrapy_splash import SplashRequest
from scrapy.loader import ItemLoader
from ..import items
log_lua = '''
function main(splash, args)
-- 自定义请求头
splash:set_custom_headers({
["Cookie"] = “cookie内容"
})
assert(splash:go(args.url))
assert(splash:wait(1.5))
return {
html = splash:html(),
}
end
'''
class GlideskySpider(scrapy.Spider):
name = 'g'
allowed_domains = ['www.g.com']
start_urls = ['http://www..com?page=' + str(i) for i in range(1, 1001)]
def start_requests(self): # 起点
for url in self.start_urls:
yield SplashRequest(
url,
callback=self.parse,
endpoint='execute',
args={'lua_source': log_lua},
)
def parse(self, response):
item = ItemLoader(item=Item(), response=response)
item.add_xpath('number', '//div[@class="col-md-1"]//text()')
return item.load_item()