QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python. S) N9 F$ r( N# [9 v8 _' T
  2. # -*- coding: utf-8 -*-5 h2 \, ]: B7 h, s& s% ]

  3. 0 ~2 @: l& y( f& Ximport requests
  4. 0 V5 U2 N, O# C: M; jfrom lxml import etree3 w& \  U$ \% |% }
  5. import sqlite3: i. y# ]$ U* Y* c  T1 L

  6.   S, n2 L! v$ d. m8 c
  7. ' @\" a6 F3 `: A\" V& Xdef write_sql(c, text):
  8. 4 }! s& |: @2 W# J    html = etree.HTML(text)1 |) m1 u\" b+ ~/ ]* P2 ~
  9.     # 标题9 r# L1 h/ q& B0 ^9 |+ j! ~
  10.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  11. 3 o9 W9 W6 U, V: x/ u1 F) S    # 链接
  12. + M5 P. k' d& A/ d    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')$ ]! y2 w% y9 t\" j* G
  13.     # 日期
  14. . ~# W( I1 F$ ~/ X: D    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  15. % i5 ?, g' M* \
  16. 8 o( G6 i\" `+ u9 f+ |1 S+ F$ o    number = 0
  17. 6 ^9 Y$ m9 n5 @% D# G2 f    for title, href, em in zip(titles, hrefs, ems):
  18. * k) q) p4 ~. x0 V9 ^        href = host + href
  19. ) O% ^9 _& ?5 `* v7 u. b        cursor = c.execute(
  20. ; S3 @$ J6 {* m# Y. ?! d! g            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  21. + w\" L& y\" B7 T# ]        res = c.fetchall(). V- t/ {2 N7 i: ~, |
  22.         # 判断该字段是否已存在
  23. 5 l; c' K. q1 ^3 Y. H        if res[0][0] > 0:+ t1 ^, X. B4 L5 s  y# b
  24.             continue
  25. . n1 O( b  y  r; M( r1 I) g- @5 r; h6 W
  26.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  27. # ]3 u9 h# G' ~' {            href,
  28. $ A5 h- M) e3 F. g% W: J            title.replace("\"", "\"\""),
  29. 8 n5 t9 A+ k1 M            em))6 F5 i# h$ f& H* j; {7 W/ u
  30.         number += 1
  31. 1 z( Z! }  z2 K# S        print(title, href, em)  o, J! g) r4 T( m0 h9 t

  32. 9 z' V* M9 h5 p    conn.commit()
  33. 3 |* o. b% y/ O+ k: W8 J! I    return number > 0
  34. . Q; n5 q: l) d\" ~8 \( d8 x$ l* a' Z! k6 f\" r, p6 V

  35. ) L* X1 B9 H2 v\" `7 a8 bif __name__ == '__main__':. [. q3 ^7 Y3 \9 W

  36. + t3 s7 T' ~! @7 T8 Q6 t/ n    conn = sqlite3.connect("Python-xxx.db")6 J0 ~5 y/ T- s/ b+ c  g
  37.     c = conn.cursor()& k$ C. F& e2 z3 U) h
  38.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  39. * C\" P* k4 f# E# B5 M2 n        Url VARCHAR,; [! Z\" ^! P! E+ D! A
  40.         Title VARCHAR,
  41. 1 U5 C$ K6 j8 J6 e( J% T& S1 |        Author VARCHAR! f' ]  u, T# V  _0 q4 j
  42.     )''')- J2 t# \- ?+ }/ \\" n, {0 H. c% j/ X
  43.     conn.commit()
  44. & P, [1 C4 y# W5 J+ Q0 @9 G8 L0 a: ?1 m\" |
  45.     host = "https://xxx"
  46. $ I+ I, \+ x' R5 @5 G6 d  }    url = host + "/xxx"( e( }5 O# b- ^. n
  47.     req = requests.get(url)8 a1 }+ w* ?: k
  48.     req.encoding = 'utf-8'2 \! X1 ^2 C6 ^* h
  49.     # print(req.text)# U. k\" J: z* L% |
  50. 6 f2 L7 P1 A& q4 y( b( X9 r! h
  51.     html = etree.HTML(req.text)
  52. ; z: F- S( i9 s, q  b    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  53. 8 L! n8 o, m1 H7 S( `8 P, n$ f    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')8 B- |5 v. h* D/ P3 [3 f
  54.     # print(clearfix, href)% b, ^+ c* l. I1 z% e
  55. * p1 J& {7 k0 s, s' x
  56.     for clearfix, href in zip(clearfixs, hrefs):
  57. 5 w  I' q5 X- I/ i; L4 |* ~9 U+ o        print(clearfix, host + href)
  58. ( a+ {8 u, g% u0 O3 B. I\" P6 z* n# b/ ]1 d7 o+ p2 d* a% P
  59.         page = 1
  60. - w( X$ @. S5 o# d        while True:+ w5 p  v: S) O1 A9 u6 f2 p: {
  61.             url = host + href + "/list_%s.html" % page6 [: ^( ]6 P4 d+ A+ X# O
  62.             req = requests.get(url)$ [- M! A. z1 F. @
  63.             req.encoding = 'utf-8'
  64. 6 B. Z5 A: x) B
  65. 7 p% c) r/ @* z& O7 Y/ r            if (not write_sql(c, req.text)):
  66. 6 ^/ j$ J' X- U$ m& a                break
  67. 7 P6 {/ B\" E. c& ^( s
  68. : c7 r$ |1 R# m6 A9 u            print("第%s页" % page)0 O. b3 o& n3 h5 ]5 \: B% G
  69.             page += 13 R\" e* \2 i0 t

  70. % Y) t! @- J2 N6 E3 V    conn.close()9 I: k# D7 J4 L0 V/ k/ I

  c/ ^/ j3 n0 O$ P( K; T% S( h  Axpath用着就是舒服~5 u: G) `! |4 t

+ F7 i- P* Z  ?5 P- a6 p0 F$ A
转发自派生社区
Python交流群:1047602540

- ~+ t: j- I% S) ^/ r: u" C7 U' j$ k6 H8 A% @
2 o) H0 i9 N% D* [$ V' a- P( j% C
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-7-18 10:05 , Processed in 0.625438 second(s), 50 queries .

回顶部