QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 1 f2 R, }1 a, `1 D5 c# -*- coding: utf-8 -*-5 c$ i3 s3 y2 G* \5 `6 T
  3. - t( _( d( h0 H3 F* z, f9 R8 v
  4. import requests3 y5 d3 Z% o0 j4 Q
  5. from lxml import etree
  6. ( C1 o  d, E; {% I% k$ Vimport sqlite3# O6 ~9 r' S/ P7 e1 Q+ K

  7. 9 M7 C2 V4 }- w; q  D
  8. # j1 P1 q# |# Y\" q% K  p1 F0 @1 \9 T5 v. vdef write_sql(c, text):5 f: _, P/ u9 u5 q) s/ {1 e5 |$ ?
  9.     html = etree.HTML(text)
  10. * w( ~+ h8 k, ^/ j# f3 i, T- @    # 标题
  11. % D' i8 U3 K5 [/ M' s8 h    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. ( G% C- K0 q2 x( ]* w    # 链接1 x4 k7 `9 F# Q* g( `
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')) X+ y& U4 Z' g% b/ H- u3 P
  14.     # 日期5 ]7 G; w0 {. F' R
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')5 a1 ^2 a# B% }( w8 f$ K  i\" q# S

  16. % Z, E& M2 l\" _% d7 u2 t  I8 M! k    number = 0
  17. 7 r' {( n1 N  f8 I2 C    for title, href, em in zip(titles, hrefs, ems):
  18. / r: A* u9 ~0 Q. {1 L# H        href = host + href% ?, `6 ^  \+ k
  19.         cursor = c.execute(7 e7 [- {; q* ~  L
  20.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href): Y& H, M/ m/ L* i0 b% x. j* U
  21.         res = c.fetchall()
  22. + G  l3 A6 u% o2 t        # 判断该字段是否已存在
  23.   C. S7 g& g0 |/ I9 U% c; j        if res[0][0] > 0:
  24.   K! \, Q& l6 B            continue
  25. : @& a+ K! }2 P/ M, r4 K1 ^
  26. 1 X0 p\" x2 U2 P, M        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (0 y\" _. N. n5 R$ h  `2 |% E- X- e6 p
  27.             href,
  28. , M. n6 W$ ]  @            title.replace("\"", "\"\""),\" u. H+ s3 L7 ^# r' K( V+ }
  29.             em))
  30. + C! B* l: S# Z, n9 X        number += 13 C- G! E: E* J7 O0 ^
  31.         print(title, href, em)! j: e, a\" u  J
  32. 6 r\" I( x8 V0 A0 ?2 a- O
  33.     conn.commit()
  34. 6 q# S/ f/ O3 E6 @    return number > 0
  35.   Z0 m  l/ B  |4 R+ |- u2 f1 W& H( b- x4 n$ j( g( x

  36. 5 O1 M) Q, D9 x/ G4 |, @/ E' G\" bif __name__ == '__main__':% c; u\" r! O* ^/ j# H; q3 c0 L

  37. 0 d: P) T+ q* b9 _7 n2 n$ M    conn = sqlite3.connect("Python-xxx.db")
  38. $ S% y\" C& p- Y* L) H& }3 f% ]( K    c = conn.cursor()8 l' O. i% E8 B5 O3 s+ f0 P
  39.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  40. 1 Y1 `+ o  R\" c7 S4 ]        Url VARCHAR,\" a. K( E6 W  x8 I\" P, j! `
  41.         Title VARCHAR,2 p; Q6 z: J; D$ y+ L% O
  42.         Author VARCHAR& H- |$ v! v6 P8 o$ U
  43.     )''')
  44.   R( |1 z- t. p  F    conn.commit()0 s0 I5 _2 I8 f5 H6 T

  45. + ^6 o, Q1 o$ ^; w( u    host = "https://xxx"1 T* Z  O  H  T9 Z% o
  46.     url = host + "/xxx"/ H9 W$ q; y* r' [
  47.     req = requests.get(url). k4 t3 C- n* ^8 |  J+ D
  48.     req.encoding = 'utf-8'
  49. 1 O2 ], r( e9 I7 ~- h# u* t    # print(req.text)
  50. ; G2 h6 u* P6 E5 ?+ ?, y. w2 |1 i2 J# ~
  51.     html = etree.HTML(req.text)' M9 s  }, K2 ^9 |8 F: @7 e
  52.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')' e3 u1 _& [9 @- b' h
  53.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  54. 5 X5 ?8 K- y\" k( x, m# W    # print(clearfix, href)6 p( W6 L; R& H8 w: ^: q$ z- b+ n3 P
  55. 2 V0 h( @, U' s9 ~% Z1 {; j6 X& ~
  56.     for clearfix, href in zip(clearfixs, hrefs):
  57. % z4 b8 ]' t  {2 F. y: [        print(clearfix, host + href)7 X0 k& E) [) f\" [0 [; V2 a/ w

  58. 7 D7 k. A  D, O        page = 1
  59. 2 w8 l  j: Y  m3 R% w! k! P) ]; Y, m        while True:$ ?\" k8 s* W7 Q0 }\" L
  60.             url = host + href + "/list_%s.html" % page
  61. ) q/ `/ b1 Y; |            req = requests.get(url)4 q; V- O. B2 A$ x/ l& n5 y) c; E
  62.             req.encoding = 'utf-8'$ P- _* y- C: o  V7 N6 \

  63. \" P6 \\" _' {\" a, I- f            if (not write_sql(c, req.text)):
  64. 5 \- M- a6 }, ?- M+ i                break7 i$ p2 Z' f: e& I1 {* I+ I, w  E
  65. . _0 h\" W' r1 _' J\" V5 i  t) p9 |
  66.             print("第%s页" % page)  q' b1 m( k2 Z5 _) u& l0 G- \9 K
  67.             page += 17 j& n. C) Z. k7 j5 n  B2 ]

  68. 0 W' f! X) K5 e' ]3 M    conn.close()
  69. 6 `0 y0 C3 Q+ A' r/ n

' j, |5 y; ~: ]1 r. W) \* `xpath用着就是舒服~2 l6 X& E- \8 U  X' D

- R" C6 y  Q6 L4 G5 w# q
转发自派生社区
Python交流群:1047602540

" u# E7 t$ ]& y, A9 }% R5 w( X& i7 L: C7 l# u3 E% i5 a" G

- T+ h/ T8 A. f: {) q: d* P4 ^' z
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-19 14:27 , Processed in 1.098347 second(s), 49 queries .

回顶部