QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1401|回复: 0
打印 上一主题 下一主题

Python-xpath

[复制链接]
字体大小: 正常 放大
檀俾九        

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python4 Q$ g' l* O( z
  2. # -*- coding: utf-8 -*-! z' `  q+ F! J) y6 H6 y\" ^. D7 F
  3.   V4 c\" L. d5 [8 b1 l! {% K% x' H
  4. import requests
  5. & p6 G& k) m9 q# h% D- t0 Gfrom lxml import etree8 T; X' A$ K- T- B# e7 t
  6. import sqlite31 B3 \$ @( h& D8 y  {9 K

  7. ; ^+ L; ]1 Q$ S# B  h\" v\" V
  8. 8 ?2 h% }3 g3 S3 rdef write_sql(c, text):+ v! ?$ {: E* L% D( l
  9.     html = etree.HTML(text)
  10. 3 q$ i1 s0 e/ ?    # 标题
  11. 4 y. e\" Q7 }' U) l    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()'): W5 D  z8 m( c% m* j
  12.     # 链接
  13. % p\" |- ~# s1 C% {, m/ s4 L\" Q! {    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  14. / W\" B' v, x& H- e( n, P& o  M    # 日期* r$ v0 ?+ q% }6 P5 y) M
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')7 Z2 l9 b5 t\" b6 b7 E4 `0 r

  16. ( A% s/ T/ ?& Q$ L. m- o    number = 0
  17. . }: _5 D# b' d    for title, href, em in zip(titles, hrefs, ems):- V& B. O1 `, W& h
  18.         href = host + href
  19. 8 T- X8 T: {( I0 Q( c( K$ H        cursor = c.execute(9 Z' A8 N. O6 j  O& S9 \: r1 V
  20.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)* A3 A' Y4 }5 r( Y$ O
  21.         res = c.fetchall()
  22. 9 }& ?# n- v0 P4 X- U9 C        # 判断该字段是否已存在
  23. ; f# O- r! T. [: u        if res[0][0] > 0:
  24. : J3 n% k) d; W5 J5 ]\" g3 K1 N            continue9 J1 L: _9 Z( q$ x! Y
  25. , b# ~) T. I# a( I4 v
  26.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (5 s5 m) z0 p$ n# D1 {  t
  27.             href,
  28. - x: j- j( B$ w, S) F( Z# v7 t            title.replace("\"", "\"\""),/ `% D/ x1 x, V\" s% D' N$ q
  29.             em))\" \( Y4 a\" `! Y
  30.         number += 10 {. H/ m8 R& U9 w! @  X0 A
  31.         print(title, href, em)- Z7 L) F0 }$ F  e, I5 D. L7 T* c
  32. 3 R3 J+ p. O) T& p
  33.     conn.commit()) }# D9 k/ K( |. e- ]
  34.     return number > 0\" V% Q7 @% K' j. Q9 o8 F
  35. 9 e* Q- y! O# l4 A; h. w3 L9 B
  36. - K( f- f% V7 ^; j* G3 |+ Y% a% t
  37. if __name__ == '__main__':
  38. ) _( p( p; Z7 H+ x0 f: P2 E4 x; h) I5 R- v2 x7 C
  39.     conn = sqlite3.connect("Python-xxx.db")1 w6 Z% u+ n5 k
  40.     c = conn.cursor(), `7 z  B$ j4 q* [  K3 ]
  41.     c.execute('''CREATE TABLE IF NOT EXISTS Python (6 b# t2 q/ Y- C
  42.         Url VARCHAR,) y1 G! P6 a3 }* f# n
  43.         Title VARCHAR,
  44. 3 Z  l5 P: m7 R- b, w        Author VARCHAR
  45. ) V  R% I\" r- z5 r    )''')
  46. 4 L) j( Z- t, m    conn.commit()
  47. 0 b2 A9 o7 s; T2 _; q( E( l- g! P( I\" e& W& R  }
  48.     host = "https://xxx"
  49. 4 a# U9 f8 C, z5 A7 i& M    url = host + "/xxx"$ O. V- A) G+ G+ @) x5 P. `$ {) P
  50.     req = requests.get(url)5 L\" k' q) H' w/ Y+ K3 c
  51.     req.encoding = 'utf-8'
  52. / H! T. L  ?' D    # print(req.text)+ I: L9 X  B( X1 w5 l! F3 ]

  53. 5 C  v% S7 J& j* f1 P5 `' g4 o    html = etree.HTML(req.text)) O: y9 P8 t. M; l) P
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  55. + r1 Q. V. P# F8 c    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')( a  W* C& E! t$ u% Q7 o, z* z
  56.     # print(clearfix, href)
  57. $ Y0 n3 A/ J& N! L8 p+ i2 {6 t. e8 _) _5 N& S5 Z! t1 [. K$ x
  58.     for clearfix, href in zip(clearfixs, hrefs):; l$ F7 g! B$ ~  @1 {8 T& M: d
  59.         print(clearfix, host + href)
  60. 9 y8 @4 X$ W5 F& k& u3 X3 ^( G
  61. / i& r& _' t1 T2 r. K; w4 s# q6 s        page = 1/ F& v# p5 x' Y- k. v' O5 n7 |
  62.         while True:
  63. 7 z* s% @  p& U- V+ ^, C; o            url = host + href + "/list_%s.html" % page
  64. $ K3 c2 l/ Y1 p9 u4 g1 [2 R            req = requests.get(url)
  65. 3 u3 b% [5 R; O$ n$ T! ~3 }            req.encoding = 'utf-8'
  66. $ X# l4 M* J- o- r9 M8 m$ }9 Y$ m  O# w/ R9 N+ C9 U' X  x
  67.             if (not write_sql(c, req.text)):
  68. 6 ]4 n) g7 V4 y$ B4 y1 B, u8 V( B                break
  69. 8 ]# e2 I, X0 l7 e\" c+ w& _. C+ _
  70. $ t9 e- Y0 F9 `            print("第%s页" % page)) {( l4 v7 A0 y/ x7 X# x
  71.             page += 1
  72. 7 d: U0 W# \\" T
  73. 5 K3 H; F3 ]6 n' y    conn.close()# r- j2 z  ^\" C  N
, u/ [% b/ J4 [8 l  k
xpath用着就是舒服~
. }) w; x$ B& H$ l9 J0 O
  i4 E3 q% G3 i. a3 k9 f
转发自派生社区
Python交流群:1047602540
2 H. ~0 h% K# s' z# I( Q

8 \, r; m7 p- D% j$ q( F) C/ q( z8 _; e  C2 C  s2 C. X2 p0 M7 a
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-20 00:09 , Processed in 0.304185 second(s), 49 queries .

回顶部