QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. . l4 Q5 \! ?+ _8 D# -*- coding: utf-8 -*-
  3. $ g7 h. s. E4 I2 w
  4. 3 W( J+ t- K( [8 a# e! e+ I\" ?8 jimport requests& n+ `; v' T5 \) D6 c
  5. from lxml import etree
  6. 3 S' \9 `9 h+ j0 N2 oimport sqlite3
  7. & f( n5 \# @% l/ b\" U( t8 }; x\" ]( s\" }; s
  8. % W# x/ n  _3 ~/ [
  9. def write_sql(c, text):6 F2 R! P8 o9 u9 L5 ]$ R. p
  10.     html = etree.HTML(text)
  11. 9 K& k\" X  p9 a: N& M9 Y$ j    # 标题$ [% P& \6 F; Q! D( I
  12.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  13. 6 k. [/ V! f1 o- S# O    # 链接- s- ]( E1 a* b9 o8 a9 w/ z\" j
  14.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')9 B/ N0 p1 Q0 o) I
  15.     # 日期3 d' J4 s% u* `6 H
  16.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  17. : S8 n4 U, T1 W' _; `: h1 E/ a2 h/ |' L
  18.     number = 0
  19. \" N% F8 Y8 K0 |+ b    for title, href, em in zip(titles, hrefs, ems):
  20. 2 O# {& ~% P- a7 G- u1 [: e3 V+ W        href = host + href
  21. ( e6 s2 V! ?& }& A9 K( g        cursor = c.execute(
  22. 5 j\" r8 g6 R8 j( B; n            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)% q# N: p, d2 @* A( x; L  l5 ^( b
  23.         res = c.fetchall()
  24. 0 `0 C3 l* o7 t1 j% J        # 判断该字段是否已存在
  25. + _# f5 }) b$ d/ \2 n* U5 q        if res[0][0] > 0:# x; m: X6 Z; U; g7 Z* X0 `
  26.             continue
  27. : {: P6 }, O- W5 f# R3 g$ G\" M2 q' j7 c4 t
  28.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (0 h2 K4 A# q\" \1 m/ K
  29.             href,( X4 N% Q. o7 E/ {3 |4 h' M1 ~\" f
  30.             title.replace("\"", "\"\""),
  31. * ]0 `& ]0 X2 ^7 c            em))' I+ C: ^) j/ Y' g* F; U
  32.         number += 1+ g: p2 s& c5 g9 P% M2 }5 \
  33.         print(title, href, em)
  34. 9 u( J8 W+ ^1 U
  35. + w( }, b7 y+ v: f  e5 M    conn.commit()6 q+ r* d8 f3 Z' X' C2 _
  36.     return number > 0
  37. 7 I  L\" C1 X2 T' r: X: u\" X$ p
  38. # M* K4 r9 A& p$ y
  39. if __name__ == '__main__':\" O- r* y. P6 E7 t* ]+ o

  40. 6 L* [: Q0 ~! t, f8 J% z    conn = sqlite3.connect("Python-xxx.db")+ h; O5 \9 \$ |* f6 J
  41.     c = conn.cursor()& L\" K! C7 l, y( O% }; w2 P
  42.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  43. : D8 M: u3 s\" M7 X4 w2 R        Url VARCHAR,
  44. # P8 _5 k5 i+ S) `        Title VARCHAR,
  45. : S7 b! \  ~4 p5 q        Author VARCHAR+ T; k. A+ d$ B! C5 h
  46.     )''')+ x1 K( w/ R9 H
  47.     conn.commit()
  48. * O& w4 ~) {$ [/ ]4 h( L& T# K
  49. / t5 q2 ~' c! S9 Q    host = "https://xxx"$ f  c$ j6 b. t8 `6 z; |* u2 z# z' T' M
  50.     url = host + "/xxx"$ B8 D# A  T5 d: Z' b! i6 r
  51.     req = requests.get(url)
  52. / J% G; |/ u; X. P3 n    req.encoding = 'utf-8'
  53. 3 [# ^( }( o8 s5 z+ k9 G    # print(req.text)
  54. 3 K6 H6 G0 [6 p5 V/ g' f2 k* B
  55. 6 \\" k1 Y* t- V5 e, C/ @: `    html = etree.HTML(req.text)
  56. * U4 F% a' t  o/ Q! O    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')- D* d5 Y$ a\" z3 {5 e\" Z
  57.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  58. 6 ?1 ~0 J; \* _6 U+ ?+ G$ Y& O    # print(clearfix, href)
  59.   D6 S; }2 [3 t\" ~# Y3 B
  60. 0 ?: ]  [' f. i$ H* R% _4 s    for clearfix, href in zip(clearfixs, hrefs):
  61. . K& y) _( A% c5 G, V! k4 j  E; U! f        print(clearfix, host + href)
  62. ! N9 n1 H4 S% s9 U( F# ]# V% L! w4 ]0 x( e\" M
  63.         page = 1. r4 j  h7 _6 Z( I, `! p8 U
  64.         while True:
  65. . u& w+ j, }5 Y) O0 p. r1 ]' w            url = host + href + "/list_%s.html" % page* q( k% i7 Z+ X* k
  66.             req = requests.get(url)
  67. ( K0 _' Q: ]1 S' I7 I( |\" K  j            req.encoding = 'utf-8', w# j% y' }/ D; t: L

  68. \" o0 P3 X8 }+ u\" s7 W1 _7 |# Z( {( C0 J            if (not write_sql(c, req.text)):
  69. ) S: N2 X7 O- N3 Q: g. q                break
  70. * n. }5 _. y3 {\" i& x# p' a5 l8 S5 J  `+ Z8 q# h9 N\" n$ S( y
  71.             print("第%s页" % page)
  72.   z  @6 W1 C3 R& |* L1 V            page += 14 X: D: C- Y$ v0 ^% y1 U# j' ]

  73. 0 Z3 D; _( G3 M  |. C    conn.close()
  74. 5 d3 M& W7 _7 f\" a7 R, F0 ^6 J) K
& f" C: h5 b; O
xpath用着就是舒服~6 ]8 W+ |) a+ A* v4 i; L

( n$ `2 r& ^& T5 t8 A
转发自派生社区
Python交流群:1047602540

8 v6 A( s( `9 F9 Z2 R  E2 U6 l* p1 n& H
0 r( o$ r& \8 f! Z6 \" R
$ Y5 n% Q& t/ E$ E2 @1 I0 a- H' P
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-4-18 10:25 , Processed in 0.394252 second(s), 50 queries .

回顶部