QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |正序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 4 ]& P4 \\" r; v4 h# t% B5 P+ `# -*- coding: utf-8 -*-0 Q: e- G# m% h, d5 [, T

  3. 1 G% b: b7 h0 a4 S  m3 simport requests/ X: d6 u1 X; ^1 `
  4. from lxml import etree! u\" p) ^! i5 r+ s  Q3 C9 q
  5. import sqlite3
  6. 2 c8 q0 @2 _: g  b% c7 \
  7. ' K# ?3 ~4 v: n2 o* M9 X$ u& R' S+ u. b: F. C( e
  8. def write_sql(c, text):/ G0 u( h: g2 l# B9 u
  9.     html = etree.HTML(text)! @, z% m! T6 _9 ^& O/ b* E
  10.     # 标题
  11. * o5 C; g) ?, B    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. 3 }0 e. C# }. \; x2 o. i+ p    # 链接& _( N. q1 l4 `1 w4 W/ W
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  14. , C6 q9 g* i4 E! [7 G! c    # 日期
  15. ' r2 J3 W/ x  w; s    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')- C3 k& F& U$ P$ ?* \4 l4 C

  16. - a3 x0 X5 W6 q: U( O\" I, y; O    number = 0: W8 m$ R\" i* _6 T\" J! B
  17.     for title, href, em in zip(titles, hrefs, ems):
  18. 7 w2 Z* s3 d& Y3 U* S: b5 o        href = host + href
  19. 7 s4 M6 o/ t3 h+ C4 ], M- E        cursor = c.execute(5 u( \$ m# Y+ p' u% a! K( y/ c
  20.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  21. 2 N$ W; Z9 W6 b% o9 Q2 |        res = c.fetchall()  ^% B% G& j6 ]+ n0 H6 p$ U\" ^
  22.         # 判断该字段是否已存在# F1 s! {; V0 E# E
  23.         if res[0][0] > 0:; q: _$ I0 q: U. D7 s7 Q8 R
  24.             continue4 s* i\" c/ A+ G  C5 s
  25. ! }% L3 j$ z2 n7 J' R8 h/ h# W
  26.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (5 p. }9 N  n% w( f& F& Q4 P8 ^
  27.             href,
  28. % T9 |% B6 Z4 A! @5 D0 X\" M; w7 z8 v            title.replace("\"", "\"\""),( d! i0 x! B- D3 I
  29.             em))4 v$ O, \0 n0 e5 U' B+ Z/ d. [
  30.         number += 1
  31. + R% L# e6 D& K\" m0 G/ l! |        print(title, href, em)
  32. * ]* X0 q. L& X6 Q3 I3 E% ^% {! i+ M; F6 W8 [! ?2 U
  33.     conn.commit()
  34. $ I2 z\" |7 y0 [    return number > 0
  35. 3 _( `' Z+ \4 o9 G% q  ^' P! @* ~4 s# b: W) x\" G; X. v1 z

  36.   {- c5 }! x' g& i8 J$ V- fif __name__ == '__main__':
  37. / P& O  j& K+ y' o/ N9 Q! I' F% T5 g  P
  38.     conn = sqlite3.connect("Python-xxx.db")3 v) `7 ^  E- i* g
  39.     c = conn.cursor()
  40. - H& c\" _3 L, J\" O- |    c.execute('''CREATE TABLE IF NOT EXISTS Python (4 D- w# j) p8 R7 f/ w
  41.         Url VARCHAR,
  42.   t& h5 n8 o( i5 V$ e        Title VARCHAR,
  43. - B, R\" E7 d& B2 d! L' M7 b        Author VARCHAR- \8 m* K* D% Z7 ^
  44.     )'''). _- w& x: ?( Y
  45.     conn.commit(); V; _, u\" ]* t! ?# ?0 Z( e
  46. \" G: l: m% G\" z: a9 J
  47.     host = "https://xxx"% E4 W3 J( q* z8 W% t0 y! N( t# U
  48.     url = host + "/xxx"! K/ X+ M# Q, w$ v1 M
  49.     req = requests.get(url)
  50. 5 S. k1 R) D7 I, s    req.encoding = 'utf-8'
  51. \" I7 i9 p3 V) X\" p\" u+ d    # print(req.text)1 m- b: Q- J1 [, O0 h
  52. : f' J! U5 l6 u! x9 j7 N3 H
  53.     html = etree.HTML(req.text)\" f- F1 |' s0 K
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')3 T, q- m2 _* s9 F$ m
  55.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')1 T( Y0 D. y! c
  56.     # print(clearfix, href)' D3 H/ c4 j% P8 b+ L
  57. ' o: j  f3 z. O% S  d, b
  58.     for clearfix, href in zip(clearfixs, hrefs):
  59. 9 ]' N( F* K% z        print(clearfix, host + href)
  60. ' @, s  a+ P* s# m/ I7 M- s\" ^+ h\" @2 x: L- |+ p
  61.         page = 1
  62. 1 T7 d9 h1 c( L2 L        while True:
  63. * G$ X+ A% @) [/ K8 A8 o; v            url = host + href + "/list_%s.html" % page
  64. 6 y4 f1 I  b! O. ^            req = requests.get(url)
  65. 1 K+ q3 d* F; Z7 |2 F& W. L            req.encoding = 'utf-8'
  66. 6 [4 p; Y7 e2 B9 O# ^$ I9 d
  67. ; F) \3 r' Y4 q( E\" [  T            if (not write_sql(c, req.text)):* |) U& h& d# z5 G& g$ r: x  R
  68.                 break3 ^0 L& v' }1 J: L- S3 a/ a
  69. - Y0 U$ J8 Z! Q
  70.             print("第%s页" % page)
  71. 2 @) V' I. z( o            page += 14 B6 Y+ u7 I; a8 p0 u; @$ t- p( o. h
  72. # |! \\" s) J6 M) ?( F
  73.     conn.close()
  74. ) h( U4 d% K2 _\" n4 a& G

7 T) @' n( f- P+ r: n; _xpath用着就是舒服~
" x' e" j* T. _% U  {! l; a$ ]
转发自派生社区
Python交流群:1047602540

6 U8 l" i$ B5 {+ ~7 r2 z+ j8 g  Y# g5 O; j, s" H8 o" D$ [

) Z" t; Q8 x- g" X
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-21 08:30 , Processed in 0.694007 second(s), 51 queries .

回顶部