pyspider 示例
数据存放目录:
C:\Users\Administrator\data
升级版(可加载文章内所有多层嵌套的图片标签)
#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2019-04-08 14:24:34 # Project: qunaer from pyspider.libs.base_handler import * class Handler(BaseHandler): crawl_config = { } @every(minutes=24 * 60) def on_start(self): self.crawl('https://travel.qunar.com/travelbook/list.htm', callback=self.index_page,validate_cert=False) @config(age=10 * 24 * 60 * 60) def index_page(self, response): for each in response.doc('li > .tit>a').items(): self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False,fetch_type='js',js_viewport_height='100000') next1=response.doc('.next').attr.href self.crawl(next1,callback=self.index_page,validate_cert=False) @config(priority=2) def detail_page(self, response): imgs=response.doc('.js_memo_node').find('img')#获取id下的所有(包括多层嵌套的)img标签 img_list='' #必须事先声明,否则return,img_list时会报错:引用未事先声明的局部变量 for img in imgs.items(): img_list+=img.attr.src+',' #把所有图片用,组合在一起 #【复习】img_list=', '.join(['cats', 'rats', 'bats']) return { "url": response.url, "title": response.doc('title').text(), "date":response.doc('li.f_item.when > p > span.data').text(), "day":response.doc('li.f_item.howlong > p > span.data').text(), "text":response.doc('#b_panel_schedule').text(), "img":img_list } #ele-3076663-2 > div.bottom > div.e_img_schedule > div > dl:nth-child(2) > dt > img
例子A
#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2019-04-08 14:24:34 # Project: qunaer from pyspider.libs.base_handler import * class Handler(BaseHandler): crawl_config = { } @every(minutes=24 * 60) def on_start(self): self.crawl('https://travel.qunar.com/travelbook/list.htm', callback=self.index_page,validate_cert=False) @config(age=10 * 24 * 60 * 60) def index_page(self, response): for each in response.doc('li > .tit>a').items(): self.crawl(each.attr.href, callback=self.detail_page,validate_cert=False,fetch_type='js',js_viewport_height='100000')#用js加载,指定页面高度,防止懒加载图片只加载一半 next1=response.doc('.next').attr.href self.crawl(next1,callback=self.index_page,validate_cert=False) @config(priority=2) def detail_page(self, response): #imgs=response.doc('#js_mainleft').find('img') #for img in imgs.items(): # img_list=img_list+img+',' return { "url": response.url, "title": response.doc('title').text(), "date":response.doc('li.f_item.when > p > span.data').text(), "day":response.doc('li.f_item.howlong > p > span.data').text(), "text":response.doc('#b_panel_schedule').text(), "img":response.doc('#js_mainleft').find('img').attr.src } #ele-3076663-2 > div.bottom > div.e_img_schedule > div > dl:nth-child(2) > dt > img
分类:
python爬虫
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现