使用splash抓取js动态加载的网页,输出网页源代码,以html的格式保存到本地,然后编写个py文件抓取自己想要的信息,又希望自己的抓取方式能够复用到scrapy-splash爬虫项目项目中。
可以使用下面的方式抓取本地的html文件:
# -*- coding: utf-8 -*-
# @AuThor : frank_lee
from scrapy.selector import Selector
htmlfile = open("zfcaigou.html", 'r', encoding='utf-8')
htmlhandle = htmlfile.read()
pagedata = Selector(text=htmlhandle)
infodata = pagedata.css(".items p")
for infoline in infodata:
city = infoline.css(".warning::text").extract()[0]
issuescate = infoline.css(".warning .limit::text").extract()[0]
title = infoline.css("a .underline::text").extract()[0]
publish_date = infoline.css(".time::text").extract()[0]
print(city+issuescate+publish_date)
首先说下网页源代码的获取:
下面这张图,对于已经安装splash的童鞋应该不陌生,在1处输入想要抓取的动态网页的网址,点一下2处。
稍等片刻,网页的返回结果就会呈现出渲染截图、HAR加载统计数据和网页的源代码。
将上图中方框内网页源代码保存到本地HTML文件里,用浏览器打开就可以像正常网页一样对其分析,抓取。如果觉得上面方式不够高级,配置一下scrapy的settings文件,和spiders下的文件只抓网页也是可以的,像下面这样,执行下,也会输出网页源代码。
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
class ZfcaigouSpider(scrapy.Spider):
name = 'zfcaigou'
allowed_domains = ['www.zjzfcg.gov.cn']
start_urls = ['http://www.zjzfcg.gov.cn/purchaseNotice/index.html?categoryId=3001']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url, callback=self.parse,
args={'wait': 1}, endpoint='render.html')
def parse(self, response):
print(response.body.decode("utf-8"))
pass
下面这张图片就是保存为html文件后 使用pycharm打开的,按下F12就可以对其进行分析了,使用文章开始处的代码就可以将我们需要的信息通过本地的html文件输出或保存。
网友评论