QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python* U, |6 x. q1 r0 Y8 j7 ^) W3 z
  2. # -*- coding: utf-8 -*-& I: E: g+ K1 k- G\" |3 j

  3. / H+ h) C: f: vimport requests8 {5 m1 G5 B: A; j/ _8 S\" M
  4. from lxml import etree4 o; i+ E# s3 i) z8 \, T
  5. import sqlite3; _. Y% F  h8 `
  6. ! H0 `. I! _2 J3 y* D# x- E

  7. + Q+ z\" ]# o6 \  ]def write_sql(c, text):! j( O\" Y/ q. O  N
  8.     html = etree.HTML(text)
  9. : @& C- V0 n\" _# b8 B8 J    # 标题; H. x. E/ n1 V/ ~* o\" p$ y
  10.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')2 a  K' T1 T7 Q% G
  11.     # 链接( {3 R  Y5 g2 O& j) K
  12.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')  k! J& s' p$ Q9 V
  13.     # 日期
  14. 9 E; Q+ s9 V, Y2 y+ x    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  15. 0 S4 f% \  W4 w& ~% P* j+ T% v; F0 X& x! f5 R' n\" N5 Q
  16.     number = 0
  17. 6 q* e. t. d; @2 G. d$ _* s; d& `    for title, href, em in zip(titles, hrefs, ems):4 m6 E9 Q2 ?% Z: P% E\" P! G
  18.         href = host + href
  19. , v8 i  K; v+ b6 B; r        cursor = c.execute(2 c; j0 w/ y; s7 O) l9 J( i
  20.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  21. 1 N4 L- `( m- j# W7 i' q6 f8 Z( Y        res = c.fetchall()
  22. 3 r& G& ?! l  e: E% @        # 判断该字段是否已存在9 ~# ]3 o0 z0 P4 H& z
  23.         if res[0][0] > 0:% z* s. t5 Q\" F, ^1 v5 ]# U
  24.             continue9 A2 S* J. Z9 ]

  25. 6 l# n5 L0 W6 m        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (, k1 S0 f, n7 s5 b4 F5 e
  26.             href,\" F9 \8 P1 O: ?% g6 m5 |; I  A' y
  27.             title.replace("\"", "\"\""),
  28. 1 W; A; n# B$ t4 I7 _) Y+ C6 |6 L            em))
  29. 5 f& N; y4 j- {\" e# ]8 O9 \        number += 1
  30. , Q1 D4 x5 E: e8 Q# _2 Q4 h  K$ M        print(title, href, em), }& q3 f/ t! }\" ^: j
  31. ' m+ O) D8 |2 K* u
  32.     conn.commit(): o5 k& D% I. ~( }5 a$ Q! P
  33.     return number > 0  ]9 k+ [2 X1 f+ z4 u) Y

  34. 6 l* G% f/ T# ^: H# ^7 E$ B; ]- \- A% m& x9 c
  35. if __name__ == '__main__':& A4 a4 C. L- p* ?7 \. r

  36. 9 K1 N! f8 z8 {( t0 u- v    conn = sqlite3.connect("Python-xxx.db")6 i, q7 c4 h. Y8 ~
  37.     c = conn.cursor()! P+ A\" T' V5 I8 q
  38.     c.execute('''CREATE TABLE IF NOT EXISTS Python (7 U) Z5 h2 w0 a/ x7 C  ~! `( i6 j
  39.         Url VARCHAR,
  40. \" Z; m; J2 Z- y8 e        Title VARCHAR,
  41. * J\" C, z5 ]1 Z1 I+ T0 _% k$ _2 K        Author VARCHAR
  42. . }+ d6 y' x; L& k( Z0 U    )''')& S1 ?( y# r4 }
  43.     conn.commit()
  44. 1 X. ~\" Z; H  f/ h- E% s
  45. + u: _\" [: q/ N    host = "https://xxx"( m/ W% M\" [$ e7 B/ S8 d( B3 W5 Q( Q5 q
  46.     url = host + "/xxx"
  47. 8 N3 C+ E/ G% [% y  ~* m( L    req = requests.get(url)' R- q( X& G% @& I! Y5 S
  48.     req.encoding = 'utf-8'7 M' ~6 [& v; g  p) _7 ]
  49.     # print(req.text)
  50. 7 S3 Z( j3 I# y/ f# j, |1 |% }' ^- i7 q! d\" Z) j
  51.     html = etree.HTML(req.text)
  52. % C\" j3 G; K1 v+ t/ B8 K# T    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  53. / W\" M6 n, T# ~7 Q, M    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')+ P/ g\" W4 Q0 c1 T  e4 N
  54.     # print(clearfix, href)5 V' V% ~# N/ j% X9 w
  55. 5 J7 ~* u5 r& J  j1 e1 v9 V
  56.     for clearfix, href in zip(clearfixs, hrefs):/ W$ B- K2 ?0 x6 x4 P
  57.         print(clearfix, host + href)5 }6 ?* b: u$ T3 V8 N3 F5 A
  58. . p/ f  R. d: l: i\" v  d
  59.         page = 12 M3 j' ]2 v5 ]( l6 q5 z  I4 g5 o
  60.         while True:
  61. ) e- Y5 `7 @8 j) R            url = host + href + "/list_%s.html" % page5 P2 `8 Q8 ?+ x
  62.             req = requests.get(url)
  63. ' P. J; }8 L$ B& l\" A8 P            req.encoding = 'utf-8'
  64. . N8 q& Y& v. E. y
  65. 0 u4 V5 N3 t5 @( \            if (not write_sql(c, req.text)):
  66. ' [8 w  J( }0 R/ R\" P6 y                break
  67. & _% t% U# d% p/ l3 K
  68. 4 R% \- Q! r4 n; d            print("第%s页" % page)
  69. 9 q6 U, E* d0 Y: h) {4 q8 h: p            page += 1
  70. 7 Z) @! {9 X1 R; w$ M: ]9 x6 H9 e& ?# |4 F; V* {1 F, O
  71.     conn.close(); ~+ O# X1 a! J( g( w

3 ?% i0 t' x: V5 U) g& l/ sxpath用着就是舒服~
2 D) F, h, G" g" b! l, Z- Z) z
转发自派生社区
Python交流群:1047602540
7 r4 H: o, K, ^; V
& g+ M9 |! X' R1 z
% A; N" p" X: _( U* D  i9 i9 E
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, 2026-9-1 14:48 , Processed in 0.370099 second(s), 50 queries .

回顶部