QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 2 G2 y1 c# l7 h\" s\" \% u# -*- coding: utf-8 -*-. E4 z+ b2 v  K, |+ t3 y

  3. 2 d; z6 R# P8 A& e$ s- U6 himport requests
  4. + d8 ^3 d( G  O\" C0 E# Y& Ffrom lxml import etree
  5. ' Q5 `) [\" h* V( w1 v5 Bimport sqlite3/ S6 S' p& _% z5 _- `* S3 C7 s

  6. * \- \0 L$ x% m, N; q1 q  R$ `, x% x( p  \3 ]4 `; ?; z! y
  7. def write_sql(c, text):
  8.   Z8 ]! N  `\" \% ~$ S    html = etree.HTML(text)$ Y! b* u1 u+ ^
  9.     # 标题
  10. 9 L, m3 x3 y9 t4 P    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()'). d4 T! _' D\" Y& M
  11.     # 链接
  12. 9 \\" B# E4 n: k\" N    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  13. , I4 O! _% i  j7 C2 R6 m7 ^; l    # 日期( c* n: x6 C2 A5 L\" X
  14.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  15. % i0 C* l5 E  \5 `/ D/ Y
  16.   J$ |+ l8 E$ D    number = 0# M/ ]) S6 W4 G2 h
  17.     for title, href, em in zip(titles, hrefs, ems):
  18. + o; V  [& r& a* G; d8 D2 Q        href = host + href% W) ^# {) p: ?. j/ N
  19.         cursor = c.execute(& @4 m$ P7 A! c3 V3 l; w/ }- ]0 l
  20.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href); x$ e( o, K6 t( w5 ]( K( V$ J' i
  21.         res = c.fetchall()+ Q: f6 ]( U6 M) d% G
  22.         # 判断该字段是否已存在
  23. & K+ @8 q! g1 F' `\" J        if res[0][0] > 0:9 ]8 h7 f4 q9 O' x/ O, X
  24.             continue
  25. / ?7 d4 r, D- i! }6 [! H
  26. $ B; W$ I2 R$ U* X6 ]        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (7 y2 W( t6 q/ z4 A
  27.             href,7 @! O0 r: e; I+ R- ~6 X, H3 E
  28.             title.replace("\"", "\"\""),
  29. 5 R* ^: M. S5 y\" y7 u: ^            em))4 ?1 z8 p& W/ r8 g
  30.         number += 1
  31. 2 u. c\" |; b9 ~) U8 `        print(title, href, em). j; R: x  Q0 F! a5 }

  32. : E# ^- E2 [! m0 v- U3 J/ m, k) _    conn.commit()- M5 z' Y/ S! Q2 G
  33.     return number > 0$ Q3 N2 {  Y( ]( x: Y

  34. 5 g& I* N* x6 v/ o% m0 J6 ]5 V( {& I\" u9 I( x$ d
  35. if __name__ == '__main__':
  36. ! S/ X4 L/ j+ y0 D9 `9 v
  37. \" A' M/ I$ c\" B3 Z    conn = sqlite3.connect("Python-xxx.db")1 W# x* d0 h$ u/ Q. C* l, K- K
  38.     c = conn.cursor()
  39. 0 h8 m3 q$ \2 W    c.execute('''CREATE TABLE IF NOT EXISTS Python (
  40. & S+ w3 y8 O1 Z0 Z\" |2 t8 |. B1 J        Url VARCHAR,
  41. + r! U& O  g) H5 l/ I+ w) T        Title VARCHAR,
  42. - i4 w) X! _0 k+ L( R        Author VARCHAR
  43. $ F4 V6 C& h( v  O    )''')
  44. - j- C$ s5 Q\" n7 c* E' V- T    conn.commit()
  45. 9 A' i( a: R! U% D8 H
  46. 0 d: C6 r2 b. r$ a    host = "https://xxx"\" K4 X) {( q: M. g* d% Z; X
  47.     url = host + "/xxx"# c5 m+ o- e# O6 [/ j1 N% T  q3 u+ |4 U
  48.     req = requests.get(url)% W0 N+ L1 T; w' _) l: t
  49.     req.encoding = 'utf-8'# ?0 ]0 `7 q* A6 b1 w! ], Q
  50.     # print(req.text)
  51. + @! n' }, J9 [\" z6 j2 w: ]+ U. p\" N
  52.     html = etree.HTML(req.text)
  53. 0 u2 q! J; i6 }4 ^1 [\" d    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')3 e8 W0 U% t# b- ~! r2 ]) C
  54.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  55. $ q/ B/ W3 {6 E    # print(clearfix, href)3 P+ e. _* j! \3 u) i, R
  56. * j; m* R* m! G) w, q) p! w
  57.     for clearfix, href in zip(clearfixs, hrefs):( W6 S1 ^6 I$ p8 t
  58.         print(clearfix, host + href)! k' i\" u# l2 x2 i6 t
  59. ! P* U+ }. {& |; e! \+ X6 p+ G) o0 }
  60.         page = 1: D: A2 h  W7 G8 R6 V; ]
  61.         while True:1 D8 y8 s! A3 [( O
  62.             url = host + href + "/list_%s.html" % page6 m( z6 q' H7 w
  63.             req = requests.get(url)9 R: y* Z- {7 ?' t0 h' ?/ C
  64.             req.encoding = 'utf-8'' m$ W3 Y7 I5 Y2 W
  65. # s; l6 G  U8 J6 o
  66.             if (not write_sql(c, req.text)):
  67. ! X9 k! j% h$ I8 @- b0 d  H                break
  68. 7 s/ J1 ?8 f+ j- \! U4 }+ o/ f3 G7 X* V( N2 a
  69.             print("第%s页" % page)
  70. ; p5 l; f8 v3 q8 i9 J            page += 14 Y3 t. q0 X* T, H7 ]

  71. ; |9 k9 @4 ]9 j' U0 x! m: O    conn.close()0 S* x! F$ U  p) j. {/ c6 H* p

5 A, I4 K8 I, t+ i2 yxpath用着就是舒服~
4 e5 y! Y8 N6 C7 X; L' [4 k6 c4 U" s& R  y
转发自派生社区
Python交流群:1047602540
; @' Q, d4 Z8 K# t+ K
1 w6 S0 J' D6 [. v
1 S1 v9 w$ M" Q8 R, a5 U* @. 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-6-3 03:44 , Processed in 0.439296 second(s), 50 queries .

回顶部