WjmdZddlZddlZddlZddlZddlZddlmZddlmZddl m Z ee j Z e dz Ze dz Zed ed d d iZgZed d D]AZed kreddef#ededdefBiddddddddddddddddddddddd d d!d"d#d$d%d&d'd&d(d(id)d)d*d*d+d+d,d-d.d.d/d/d0d1d2d3d4d3d5d5d6d7d8d9d:d:d;d<d=d>d?d@dAdBZdUdDZdVdFZdGZdHZdWdJZdKZdLZdMZdNZdOZ dPZ!dQZ"dXdRZ#dSZ$e%dTkre&e$dSdS)Yu 北京展览信息爬虫 v3 - 多源直接抓取版 核心改进(对比 v1/v2): 1. 放弃 Tavily 搜索 + 正则提取(数据质量极差:单字标题、无场馆、无展期) 2. 改为直接 HTTP 抓取已知数据源页面 + HTML 结构化解析 3. 每条展览必须包含:名称、场馆、展期、门票、简介 4. 报告按原始模板结构输出(详细版) 数据源(全部直接 HTTP 抓取): 1. ⭐⭐⭐ 北京本地宝 7 月展览汇总(主数据源,HTML 结构化解析) - URL: http://bj.bendibao.com/news/202674/384308.shtm(第1页国博) - 追加抓取第2-12页(其他博物馆) 2. ⭐⭐ 携程展览汇总(补充票价简介) - URL: https://hk.trip.com/events/9245182-2026-beijing-exhibitions-collection 使用方法: python3 crawler_v3.py [--date YYYY-MM-DD] 输出: - data/beijing_exhibitions_YYYY-MM-DD.md - JSON 结果到 stdout N)datetime)Path)unescapedatalogsT)exist_okz User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z.http://bj.bendibao.com/news/202674/384308.shtmPz*http://bj.bendibao.com/news/202674/384308_z.shtmu中国国家博物馆u国家博物馆u故宫博物院u首都博物馆u北京大运河博物馆u大运河博物馆中国美术馆u!中国人民革命军事博物馆u军事博物馆u北京自然博物馆u国家自然博物馆u中国科学技术馆u中国科技馆u中华世纪坛北京展览馆u北京石刻艺术博物馆u石刻艺术博物馆u北京艺术博物馆u万寿寺博物馆u北京白塔寺管理处u 白塔寺u北京市白塔寺管理处u中国电影博物馆u北京汽车博物馆u中国园林博物馆u民航博物馆u北京市古代钱币展览馆u德胜门箭楼u北京天文馆u中国现代文学馆u北京鲁迅博物馆u鲁迅博物馆u北京文博交流馆u 智化寺u北京市智化寺管理处u香山革命纪念馆u北京古钟博物馆u 大钟寺u北京古代建筑博物馆u 先农坛u老舍纪念馆u北京考古遗址博物馆u考古遗址博物馆u$北京市大觉寺与团城管理处u 大觉寺u$北京市大葆台西汉墓博物馆u 大葆台u北京中华民族博物院u中华民族园INFOctjd}d|d|d|}t|d t t dtjdd z d d 5}||d zddddS#1swxYwYdS#YdSxYw)Nz%Y-%m-%d %H:%M:%S[z] [z] T)flushcrawler_z%Y%m%dz.logautf-8encoding )rnowstrftimeprintopenLOG_DIRwrite)msgleveltslinefs J/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/crawler_v3.pylog_msgr$ds  !4 5 5B $r $ $e $ $s $ $D $d 'Nx|~~'>'>x'H'HNNNNPS^e f f f !jk GGD4K  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !  s1AB9B, B9,B00B93B04B99B>c tj||t}d|_||jS#t $r!}td|d|dYd}~dSd}~wwxYw)N)timeoutheadersru 抓取失败 z: WARNING)requestsgetHEADERSrraise_for_statustext Exceptionr$)urlr'res r# fetch_urlr3os Lgw ? ? ?  v ***q**I666ttttts=A A+ A&&A+ctjdd|}t|}tjdd|}tjdd|}|S)u去除 HTML 标签z<[^>]+> z \s+)resubrstrip)htmlr.s r# strip_tagsr;zsW 6*c4 ( (D D>>D 6)S$ ' 'D 6&#t $ $ * * , ,D Kctjdd|}tD]#\}}tjdd|}||vr|cS$dS)u!从文本中识别博物馆名称r6)r7r8 MUSEUM_MAPitems)r.cleanfullshort full_cleans r#normalize_museumrEsg F62t $ $E!'')) eVFB--   LLL  2r<r>c t|}|sgStjd|tj}gd}dt |dd}t |}|r|}fd}|D]}t |tdkr8tjd} | rk|| d} tj d d| } | r!t| d kr| |pd ddd ddd |d tj d|tj} | r{t | d} t | } | r6t| dkr#tjd| s|| }Wrodvr dd dd}tj dd|}|d<t|}|ddd<|ddd< dvr dd dd}tj dd|}|d <d!d krt |}|r|d!<d"vr d#d d$d}tj d%d|}t|d&kr |dd'd(<%drd(sztdkrggd)}tfd*|DsHtj d+d}t|d,kr |dd'd(<||r#t!d-|d.td/S)0u解析本地宝单个页面z]*>(.*?)

r>NicrjdrUtddkrz.save_current..s'00aqEz000000r<)r+lenanyappend)skiprH current_ex exhibitionss @r# save_currentz)crawl_bendibao_page..save_currents  /*..11 /c*W:M6N6NRS6S6SIIIDw'E0000400000 /"":... r<z^(\d{1,2})[\s ]+(.+)u;\s*(展览时间|展览地址|展览介绍|【导语】).*$ 待确认免费 本地宝 rHvenue start_dateend_dateprice descriptionlocationsourcer0z]*>(.*?)r z ^\d{1,2}[\s ]rMu展览时间:u 展览时间:u.\s*(展览地址|展览介绍|温馨提示).*$date_rawstartriendrjrNu展览地址:u 展览地址:u!\s*(展览介绍|温馨提示).*$rmrhrOu展览介绍:u 展览介绍:u5\s*(温馨提示|微信搜索|关注后|对话框).*$irl)rPrQu 关注后u 对话框rRrfu 预约开票u闭馆u 开放时间u暑假u暑期u 学校校历u根据北京市教委u 端午佳节u提升服务水平u北京市文物局u为更好地满足u为满足广大u暑假来北京u 一年一度u 今天小编u 七月七日u七月二十一日u六月来博物馆u 六月盛夏u 七月特色u出游提前看c3 K|]}|vV dSrTrU)rWrXr.s r#rYz&crawl_bendibao_page..s';;19;;;;;;r<u+\s*(温馨提示|微信搜索|关注后).*$r%u 本地宝[u]: 个展览)r3r7findallDOTALLr;rEr9rZmatchgroupr8searchreplace parse_dater+r[r$)r0labelrawp_tagscurrent_museum page_text page_museumr`p num_matchrH bold_match bold_textdetecteddate_strparsedaddrmdesc skip_in_textr^r_r.s @@@r#crawl_bendibao_pagers C..C  Z,c29 = =FKNJ3uu:&&I"9--K%$      F?F?!}}""$$ t99q== H4d;;   LNNNOOA&&,,..EFY[]_deeE Uq"+:{"$ "%#% "*    Y=q")LL  ":#3#3A#6#677==??I' 22H C NNR//AQS\8]8]/ !) ! ?%%<<(92>>FFXZ[[aacc6"SUWYabbhhjj)1 :&#H--+1::gr+B+B <()/E2)>)> :&&4''||$5r::BB?TVWW]]__vBBMMSSUU)- :&g&+55(..A0./ 7+4''||$5r::BB?TVWW]]__vVXZ\`aaggiit99r>>04TcT J}- ++ ?JNN=4Q4Q ?VYZ^V_V_bdVdVd R R R ;;;;l;;;;;?6"PRTVZ[[aaccD4yy2~~48#J =1LNNN HFuFF#k*:*:FFFGGG r<ctdg}tD]>\}}t||}||t jd?tdt |d|ddD]+}td|ddd d |d ,t |dkr td t |d |S)u-抓取本地宝展览汇总(主数据源)u+【数据源1】北京本地宝展览汇总r u 本地宝合计:ruN -> rH# | rhu ... 等共 u 个)r$BENDIBAO_PAGESrextendtimesleeprZ)all_exr0r}exsexs r#crawl_bendibaors 9::: F$ U!#u-- c 1  :3v;; : : :;;;RaRj>><"W+crc*<zcrawl_namoc..6sC S S SBr,'75'R'R'R'RBzN'R'R'R'R'RR'R'R'Rr<u 中国美术馆:rurrHN(rri~rjr$rrrrZ) hardcodedvalidrrs @r# crawl_namocrs -... LNN # #J / /Eh&&$h3') \&&$^3') I2 T S S S) S S SE 93u:: 9 9 9:::TTR"W+crc*RRr,/?RR"Z.RRSSSS Lr<c tdtjdddddddd d d d d ddddddd d d dddddddd d d g}fd|D}tdt |d|S)u重点展览补充u"【数据源3】重点展览补充ruE遇见吴哥窟——柬埔寨国家博物馆吴哥文明文物特展u遇见博物馆·北京798馆z 2026-06-15z 2026-10-15u 需购票um柬埔寨官方支持,122件/组国宝级文物,"溯源高棉""鼎盛吴哥""海丝纽带"三大单元。u朝阳区798艺术区携程Fhttps://hk.trip.com/events/9245182-2026-beijing-exhibitions-collectionrgu3仁风景从——故宫博物院藏捐献文物展u故宫博物院·景仁宫z 2026-04-01z 2026-12-31u故宫大门票60元u@故宫百年系列展,100位捐献者的逾100件/套展品。u东城区景山前街4号u3如是莫高——敦煌艺术大展(第二季)r z 2026-05-01z 2026-09-30u?现象级文博大展第二季,复制洞窟与珍品力作。u西直门外大街135号cLg|] }|dcxkr |dknn|!SrrUrs r#rz"crawl_featured..jsC R R RBb&6%&Q&Q&Q&Q2j>&Q&Q&Q&Q&QR&Q&Q&Qr<u 重点展览补充:rur)featuredrrs @r#crawl_featuredrAs 0111 LNN # #J / /E]4&$ Q/[ K1&$+]3[ K&&$ \2[ /"HH S R R R( R R RE .s'44!1:444444r<r>r)rHrhrirjrkrlrnr0u 携程提取:ru) r$r3r;setr7finditerryr9rstriprZr[addr\) r0r~r.r_seenpatternspatternrr]rHs @r# crawl_tripcomrss 0111 RC C $ $ $C  c??DK 55D ?rH Wd++  AGGAJJ$$&&--e44ED  SZZ1__Ur9I9IXXX4444t44444 HHUOOO&&!&!#&($&!#')"*" ( (    * <K 0 0 < < <=== r<c|}ddfddfddfddfg}|D]C\}}tj||}|r'||\}}||d cSD|d d S) NuW(\d{4})年(\d{1,2})月(\d{1,2})日?[—\-~至到]\s*(\d{4})年(\d{1,2})月(\d{1,2})日?c |dd|ddd|dd|dd|ddd|ddfS)Nr-r rbrarcrzfillgs r#zparse_date..sqt==adjjmm==adjjmm==!A$?h?h1TU?h?hYZ[\Y]YcYcdeYfYf?h?hir<u&(\d{4})年(\d{1,2})月(\d{1,2})日?起c|dd|ddd|dddfS)Nrrr rbr>rrs r#rzparse_date..sAqt==adjjmm==adjjmm==rBr<uC(\d{1,2})月(\d{1,2})日?[—\-~至到]\s*(\d{1,2})月(\d{1,2})日?cJtjjd|ddd|ddtjjd|ddd|ddfS)Nrrrbr rarryearrrs r#rzparse_date..sx|~~*LLQqTZZ]]LLQqTZZ]]LL|~~*LLQqTZZ]]LLQqTZZ]]LLNr<u=(\d{1,2})月(\d{1,2})日?(?:起对公众开放|起开放|起)ctjjd|ddd|dddfS)Nrrrbr r>rrs r#rzparse_date..sFx|~~*LLQqTZZ]]LLQqTZZ]]LLbQr<)rqrrr>)r9r7rzgroups)rrXrregexfmtrrqrrs r#r|r|sA c i i k 2 B B D O N N O J Q Q S H00 s IeQ    0QXXZZJE3"3// / / / 0r " ""r<ci}|D]}|ddd}||vr||}dD]7}||s ||r ||||<8|ddkr$|ddkr |d|d<t|||<t|S)NrHro)rhrirjrkrlrmrnr)r+dictlistvalues)r_rrkeyoldfields r# deduplicaters D ! !k#2# $;;s)C` + +wwu~~+"&&--+!#ECJwwx  H,,1A1AX1M1M "8 H RDII   r<c|dddz|ddzdz|ddzgd}tfd|DrdSgd }tfd |Drd Sgd }gd }tfd|D}tfd|D}|dks |dkr|dkrd S|dks|dkrdSdS)NrHr>r5rlrh)u童绘u 少年儿童u三茶u 茶文化u 茶产业u 葫芦制作u育儿u养育u 民族育儿亲切的关怀u周恩来邓颖超u 百世合香u百合u植物庞贝城u 灯具展u灯具ru我们这样长大c3 K|]}|vV dSrTrUrWkwrHs r#rYz&classify_exhibition..' . .22; . . . . . .r<)lowu 供参考)u 文艺复兴u 卡拉瓦乔u 达·芬奇u 达芬奇u 八大山人u写意u吴哥u敦煌u 如是莫高u 李静训u故宫博物院藏捐献u 仁风景从u海外中国图像u卡塔尔游牧u波尔蒂纳里u 巴西魂u 美景宫u 克里姆特u 花绘真迹u 三星堆u玛雅u 古埃及u庞贝u 丝绸之路c3 K|]}|vV dSrTrUrs r#rYz&classify_exhibition..rr<)topu 强烈推荐)u历史u人文u古代u考古u文物u 古建筑u书法u佛教u青铜u文明u壁画u石窟u丝绸u玉器u书画u雕刻u文献u简牍u金石u碑刻)u艺术u摄影u油画u版画u水彩u雕塑u国际u交流u文化u非遗u工艺u 卡塔尔u巴西u 柬埔寨u国博u故宫u首博u 美术馆c3$K|] }|vdV dSr NrUrWrr.s r#rYz&classify_exhibition..'55""**A****55r<c3$K|] }|vdV dSrrUrs r#rYz&classify_exhibition..rr<rbr )midu 值得一看)r+r[sum) r low_force_kw top_force_kwtop_kwmid_kw score_top score_midr.rHs @@r#classify_exhibitionrsk FF7B  E 3; r22 2S 8266'2;N;N ND===L . . . . . . ..."!!L . . . . . . ...%$$F F555555555I555555555IA~~)q..Y!^^$$ a9>>$$!!r<c&|p%tjd}gggd}|D]5}t|\}}||i|d|i6t |}t |d}t |d} d} d} d} d } g}|d ||d |d |d |d|d|d|d| d|dt |dd|d|d|dtjd|d |d|d |dr|d|d t |ddD]\}}|d|d|d|d | ||d!| ||d"| || |}|r|d#||d |dr |d$|d t |ddD]\}}||z}|d|d|d|d | ||d!| ||d"| || |}|r|d#||d |dr|d%|d |d&|d't |ddD]S\}}|| z|z}|d(|d)|dd)| |d)| |d)| |d* T|d |d|d |d+|d |d,|d-|d.|d/|d0|d1|d |d2|d3|d4|d5|d |d6|d7|d8|d9|d |d|d |d:|dtjdd;d<|}td=|d>z }t|d?d@A5}| |dddn #1swxYwYtdB|dC|dD||fS)ENr)rrrr}rrc|dd|dd}}|dd}|r |r|d|S|r|dS|r|SdS)Nrir>rjrpu — u起u展期待确认r+)rrXr2r~s r#fmt_datez!generate_report..fmt_date svvlB'' B)?)?1ffZ$$   >>a>> !  999   J  r<cz|dd}|sdSt|dkr |dddzn|S)Nrlr>u…)r+rZ)rds r#fmt_descz!generate_report..fmt_descsF FF=" % % 4"%a&&3,,q#wA5r<cF|dd}|r|dkrdS|S)Nrkr>reu免费(需预约)r)rrs r# fmt_pricez"generate_report..fmt_prices0 FF7B   +AMM**r<c|dd}|dd}|r|r ||kr|d|S|pdS)Nrhr>rmu · rdr)rvlocs r# fmt_venuez"generate_report..fmt_venue$sZ FF7B  ffZ$$  # #??S?? "Kr<u# 北京展览推荐 - r>u## 📅 今日概览u- **在展数量**:u 个(精选)u- **强烈推荐**:u0 个(历史人文/古代艺术/世界文明)u- **值得一看**:u# 个(文化交流/艺术大展)u- **供参考**:ru! 个(亲子/科普/科技类)u3- **数据来源**:北京本地宝、携程展览u- **数据更新时间**:r5z%H:%Mz---uU## 🌟 第一梯队:强烈推荐(历史人文 · 古代艺术 · 世界文明)r z### z. rHu- **场馆**:u- **展期**:u- **门票**:u- **简介**:uE## 🌟 第二梯队:值得一看(文化交流 · 艺术大展)u=## 📌 第三梯队:亲子/科普/科技类(供参考)u4| 序号 | 展览名称 | 场馆 | 展期 | 门票 |z'|------|---------|------|------|------|z| rz |u## 📌 参观实用信息u### 🎫 预约方式u>- **故宫**:提前7天20:00开始预订(www.dpm.org.cn)u>- **国家博物馆**:提前7天预约(www.chnmuseum.cn)u6- **中国美术馆**:提前预约(www.namoc.cn)uH- **首都博物馆**:关注「首都博物馆」微信公众号预约u9- **免费展览**:部分也需预约,请提前确认u### 🚇 交通建议u<- **优先地铁**:北京停车困难,建议地铁出行uH- **798 艺术区**:地铁 14 号线望京南站,换乘公交/打车u3- **故宫周边**:地铁 1 号线天安门东站u#### 👨‍👩‍👧 亲子观展u=- **建议时长**:每展 1.5-2 小时,避免孩子疲劳uB- **携带物品**:水杯、小零食(馆外食用)、湿巾u0- **休息安排**:选择有休息区的场馆u!*由 Travel Agent 自动生成 | u | 每日 9:00 更新*rbeijing_exhibitions_z.mdwrru报告已生成:u(u 个展览)) rrrrr\rZ enumeratejoinDATA_DIRrrr$)r_ report_dater classifiedrrr}totaltop_nmid_nrrrrLiridxcontent report_pathr"s r#generate_reportrs  >8<>>22:>>EBr22J99*2.. u5  !7B!7!7!78888   E  5! " "E  5! " "E ! ! !666      AHH .u . .///HHRLLLHH #$$$HH >3J3J73S3S U UVVVHHRLLLHHUOOOHHRLLL%  hiii  z%0!44  EAr HH.A..G.. / / / HH6yy}}66 7 7 7 HH5xx||55 6 6 6 HH6yy}}66 7 7 78B<E>>>>K k3 1 1 1Q  E E E E E EFFF K s ]..]25]2c |tjd}d}tjdd}t |D]5\}}|dkr"|dzt |kr ||dz}-|dkrd}6tdtd|td|st}tj dt}tj dt}tj dt}||z|z|z} t| } td t | d t | d ng} gg}}t | d kr!td t | ddt| |\} } t | dkrdnt | d krdndt | t | t | t!| t |t |t |t |dd} t#dt%j| ddtdt | dt | d krdndS)NrFr z--datez --output-onlyTz<============================================================u/北京展览爬取 v3(多源直接抓取)- u 合计:u 条,去重后:u 条ru⚠️ 数据量偏少(u 条)r) successwarningerror)bendibaonamocrtripcom)statusr total_items saved_itemsrsourcesz __JSON_RESULT__ rb) ensure_asciiindentu 完成!共 rur)rrrsysargvrrZr$rrrrrrrrstrrjsondumps) target_date output_onlyargsrargex1ex2ex3ex4runiquerrresults r#mainr$s,..))*55KK 8ABBrT)'__doc__rr7rrr*rpathlibrr:r__file__parentBASE_DIRrrmkdirr,rrangerr\r?r$r3r;rErrrrrr|rrrr$__name__exitrUr<r#r/s?0  4>>  f  V  t D   q"``AAvvOQXUVQXQXYZZZZTATTTV]Z[V]V]^____#.#(#(#( #  4 # ( #():#4#4#.#(#(#"#:#1# # ";!#"4###$4%#&4'#(()#*%&7+#,(-#.4/#0.1#2[3#4";5#647#8[9#:";;#<(=#>"#:?#@+KA#B+KC#D"#4E## T    kkkk\0"""R+++d)))`###2    ."."."j@ @ @ @ N5(5(5(p zDLLLLLr<