QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |正序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python/ L2 K3 \0 |) f% K) h
  2. # -*- coding: utf-8 -*-
  3. 2 k# L9 ^# ~, e1 D$ Q) _$ k  h1 _# n1 O8 A3 k9 ]- y# y
  4. import requests
  5. ' @- M7 Y4 M+ ?$ `from lxml import etree- o5 S- f6 v: X$ D( z+ }
  6. import sqlite39 k) A9 y% ^# y! S. C
  7. ! O% C, D, a1 B7 j8 k5 D9 x
  8. ) d, G4 |6 _; L$ p
  9. def write_sql(c, text):
  10. 8 q) ]7 C, E5 K5 N4 ]2 s    html = etree.HTML(text)8 g  Q# ~* P$ t2 v; u/ W7 g% [; J4 ]
  11.     # 标题9 o: T! D+ ^% c% A
  12.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  13. + d+ V6 s0 R8 h* H, z, R3 S2 d    # 链接* R' t* J2 R! I0 y. [$ {2 d0 f2 |
  14.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  15. / k0 n, _. B3 e1 f9 V    # 日期
  16. . O' Z) L* q% e$ t: @' L! d- T, J    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()'): c% A& m) M4 ?3 R1 M5 g; t7 K+ G( T/ i
  17. 1 l% b9 v; L) ~. z\" U  D$ c/ M
  18.     number = 0: L8 n\" p7 u8 {8 p
  19.     for title, href, em in zip(titles, hrefs, ems):
  20. , l. n8 l8 J- r6 U' c1 a        href = host + href# G3 Z+ _* G' f9 k
  21.         cursor = c.execute(
  22. ( j- O, J# `6 [) i) j2 O            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)8 H2 T. r& M- J
  23.         res = c.fetchall()
  24. + t7 N: e4 |! i- N5 B6 [\" t) L1 \        # 判断该字段是否已存在4 a$ n3 p/ X0 T& {$ K- N3 z* b
  25.         if res[0][0] > 0:
  26. 1 ]$ B  ]! p, c2 L3 l; |; s            continue$ V1 ~' g0 M6 L5 L

  27. \" _) ^( J8 _- |, K, s        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (% i: P, ~/ Q' W' ]5 U
  28.             href,6 x$ ^2 Q3 \5 V& m7 V6 u
  29.             title.replace("\"", "\"\""),
  30. 0 V5 c6 u+ f( i7 q9 M5 o; b\" W. n            em))
  31. 4 [* \+ c) s2 Y. s        number += 1
  32. \" l; K  N  w$ m* \# a5 t9 B& s; L2 S        print(title, href, em)
  33. ; o- M' h4 y) k# T6 \8 J* I- Y, m  c/ x+ A+ ]( A
  34.     conn.commit()7 T7 e2 ]\" p% I
  35.     return number > 06 w- K6 W% E( ^9 o( B! D\" u; K4 F
  36. - ^+ ?0 p5 U9 j* X, T: E$ D

  37. % U8 |8 ^3 b( nif __name__ == '__main__':  ~7 E* K1 L2 r  b6 g
  38.   ?& Q( O' X# j5 M
  39.     conn = sqlite3.connect("Python-xxx.db")
  40.   p! I) I. d( I    c = conn.cursor(), R5 ^5 |$ D! N3 S0 G. R
  41.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  42. 5 B' j0 `/ J- l  c. a        Url VARCHAR,0 T! ?9 \) }: a
  43.         Title VARCHAR,2 t$ o' h, f7 U. C( K1 `
  44.         Author VARCHAR3 w6 w- x& u\" i& y1 p
  45.     )''')# M* e) P4 p# H# g) ^! U* s
  46.     conn.commit()
  47. 9 Y# j& K( o' ~8 T7 V1 h2 o
  48.   y7 J, b\" `' E. N+ \    host = "https://xxx"
  49. & D\" @- Q0 C5 t7 [8 Y: M7 [    url = host + "/xxx"/ y  Z( [) \7 \* I/ b: w1 t
  50.     req = requests.get(url)2 O' o( q4 D% C9 {- k9 {! P
  51.     req.encoding = 'utf-8'
  52. ) `' d\" _5 B( M1 |9 q2 ^  S. f    # print(req.text)
  53. ' ^( m9 P( `! t1 ^3 Q, {0 j: O
  54. ; ?( s* j9 X! ~+ _2 Y    html = etree.HTML(req.text)
  55. 0 L9 ]# T0 g  J    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')( r+ d4 ~+ J: h4 W; j# q* p
  56.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  57. ) R: B/ A. d& \: L7 i, F1 |    # print(clearfix, href)
  58. 0 a$ i3 `% i  H( [/ p/ H, E  R( J! M\" E3 g- A! n. l; s1 j/ [0 f
  59.     for clearfix, href in zip(clearfixs, hrefs):
  60. # D- U9 @% t* S$ H5 ]0 J# v        print(clearfix, host + href)
  61. & s& p, F  ^& |0 z: E, Z1 |0 I: ^/ r% \* t' p6 I9 ]+ d4 `& p5 R
  62.         page = 1
  63. . O% z- u( D2 n+ v        while True:9 w6 @+ I; e$ g: ~\" @
  64.             url = host + href + "/list_%s.html" % page/ L/ p1 @  q- Y: q4 _  r
  65.             req = requests.get(url)
  66. 5 F. r$ u2 Y- r% m            req.encoding = 'utf-8'
  67. ! ~* t6 X' i& I. f0 o( _9 x+ b9 T5 d0 j, x\" t- b+ q
  68.             if (not write_sql(c, req.text)):
  69. * H: g\" u& P: D                break
  70. ! |6 G/ o3 d8 M\" W  \. W
  71. / W  w+ a. Y6 ?. ]1 G9 A1 P1 P            print("第%s页" % page)/ b- Z( N* u) ]2 `! r; }
  72.             page += 1
  73. 3 x- H2 ~, q! H% Q4 S2 I5 t+ d
  74. ( s3 @. W\" z0 S    conn.close()
  75. 6 h9 x; E/ G/ J' f5 _( Y

  ?; S9 A+ V0 v) zxpath用着就是舒服~
0 \; R  m. O$ x7 B; R9 G7 e. E+ j) I6 U7 N
转发自派生社区
Python交流群:1047602540
: m. W2 Z) z2 g' H; J# V6 J; Q
2 s# d- n# ?0 h: z3 H* @  l

/ h  c, ^% ~+ s3 v# b
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 14:22 , Processed in 0.396810 second(s), 50 queries .

回顶部