获取网页的动态数据并且存储成excel表格形式

xiaoxiao2021-03-01  8

 动态获取网页数据,今天感觉到经历了无与伦比的绝望来一次记录一下自己的心情,并且写了源码希望大家跳过这个坑

 这是middlewares.py文件里的代码来请求动态数据并返回给spider文件

class SeleniumSpiderMiddlewares(object): #在middlewares.py文件里面插入请求自定义的 def __init__(self): self.driver=webdriver.PhantomJS() def process_request(self,request,spider): # 当引擎从调度器中取出request进行请求发送下载器之前 # 会先执行当前的爬虫中间件 ,在中间件里面使用selenium # 请求这个request ,拿到动态网站的数据 然后将请求 # 返回给spider爬虫对象 if spider.name=='tao': # 使用爬虫文件的url地址 spider.driver.get(request.url) for x in range(1,24,2): i=float(x)/24 # scrollTop 从上往下的滑动距离 js='document.body.scrollTop=document.body.srcollHeight *% f'% i spider.driver.execute_script(js) # 设置响应信息 # 响应的url为请求的url # 响应的网页内容为请求网页的源码 # 响应的编码为utf-8 # 请求的信息为获取的请求信息 response=HtmlResponse(url=request.url, body=spider.driver.page_source, encoding='utf-8', request=request) # 这个地方只能返回response对象 # 如果返回了response对象 # 那么可以直接跳过下载中间件 # 将response的值传递给引擎 # 引擎又传递给 spider进行解析 return response

 在爬虫中的文件获取数据

import scrapy from ..items import TaobaoItem from selenium import webdriver class TaoSpider(scrapy.Spider): name = 'tao' allowed_domains = ['p4psearch.1688.com'] start_urls = ['https://p4psearch.1688.com/p4p114/p4psearch/offer2.htm?keywords=花卉&cosite=baidujj&location=landing_t4&trackid=885688128720911847937377&sortType=&descendOrder=&province=&city=&priceStart=&priceEnd=&dis=&provinceValue=所在地区'] def __init__(self): self.driver=webdriver.PhantomJS() def parse(self, response): item=TaobaoItem() # print(response.text) con_list=response.xpath('//div[@class="offer_item"]') for div in con_list: title=div.xpath('.//div[@class="tips2"]/text()').extract() print(title) price=div.xpath('.//span[@class="price"]/text()').extract_first() print(price) item['title']=title item['price']=price yield item 这是items.py文件 title=scrapy.Field() price=scrapy.Field()

 最后来写一下把数据如何存入到excel表格中,将一个Excel表格 ,命名为table.xlst

pipeline.py文件里面的代码

import xlwt class TaobaoPipeline(object): def __init__(self): self.workbook=xlwt.Workbook(encoding='utf-8') self.sheet=self.workbook.add_sheet('花卉') self.info_list=['title','price'] self.row=1 def open_spider(self,spider): for index ,info in enumerate(self.info_list): self.sheet.write(0,index,info) def close_spider(self,spider): self.workbook.save('table.xlsx') def process_item(self, item, spider): data_list=(item['title'],item['price']) for index,info in enumerate(data_list): self.sheet.write(self.row,index,info) self.row+=1 return item

 最后要记住setting.py文件决定你的数据的是否出来就是来开启管道和其他设置最后给你们截图

一定要关闭

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-3100302.html

最新回复(0)