QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. ; Z& _* Q; H+ W+ B1 r1 i# -*- coding: utf-8 -*-
  3. 4 q5 [\" C  y- j2 Y5 F( \# t7 ^3 B1 x2 E. M) R* O0 K
  4. import requests$ q+ i- N4 g- ~8 A0 B
  5. from lxml import etree
  6. 0 e1 l/ P+ n\" l& M. }import sqlite38 M7 z; z! m* g

  7. 0 G3 S& W3 W' j+ Z! ?# a4 d! s; E' k1 I3 w+ g' q# R
  8. def write_sql(c, text):
  9. + }3 I+ `8 y0 w$ v, [\" p& t    html = etree.HTML(text)
  10. 5 U4 p1 [7 z3 |7 q    # 标题. u% q- \) n  R3 I# Y
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')* @8 g: ?  s, C/ D\" t9 I. L
  12.     # 链接: W! G2 p) [$ n5 C+ Y
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')/ W. A  M* ~: N, z7 N& K
  14.     # 日期
  15. ) V$ r' Q0 I4 |/ D    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')8 y$ q+ R' z5 U- w& {) p: }8 K3 M8 Q1 u
  16. - A8 h* N5 u9 B
  17.     number = 0
  18. 5 x. X+ _; b3 E/ M# d0 p# v    for title, href, em in zip(titles, hrefs, ems):
  19. ( s6 _1 g- t1 W' d        href = host + href' o, e; L8 t. r) e
  20.         cursor = c.execute(
  21. 2 B' `\" W. G0 g7 e* h' r            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)- g( C+ s+ q- f( m! L
  22.         res = c.fetchall()
  23. % \$ X# f6 F! F0 Q/ Q% m        # 判断该字段是否已存在  |8 p' L\" Y  j\" v( |5 G
  24.         if res[0][0] > 0:
  25. ' V0 }: @: {5 `* }3 l            continue2 D& d: `, |- |8 @5 ~
  26. * z; n$ R+ `/ c1 [- ^! C
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (3 V% w5 C\" y  e  @6 Q. g
  28.             href,7 E) V- l7 g( e\" x, K6 o3 E5 _
  29.             title.replace("\"", "\"\""),' I& q4 Z) s) V) M. t; _\" G; W
  30.             em))5 I& P! _9 e* J4 C: F* t9 U0 V7 K
  31.         number += 1+ L% j0 o, y# G
  32.         print(title, href, em)
  33. ; y* r% T2 T; T5 [) |: q- e# M; c* p3 Q8 L- W
  34.     conn.commit()
  35. ; o3 ?6 h( u7 h$ Q, I! s    return number > 0: B  A. a; o& ^; o0 a

  36. 5 E$ i4 }5 H5 j/ h6 N- f& l3 y6 P) |* ~+ \& P* z! N7 \# m
  37. if __name__ == '__main__':
  38. 2 _9 Y% k4 |% R' t
  39. 1 A; e1 b) N6 m4 y1 R    conn = sqlite3.connect("Python-xxx.db")
  40. ( j1 P+ w, Q0 m* ~5 g$ T2 E0 {    c = conn.cursor()% R& J, g3 `: y- ^\" y4 L3 K/ l
  41.     c.execute('''CREATE TABLE IF NOT EXISTS Python (. W* |0 \7 |2 h\" [8 o
  42.         Url VARCHAR,+ u1 f2 b9 _9 L, n; ~% Y
  43.         Title VARCHAR,  `/ W\" y\" i# F- a: \& j
  44.         Author VARCHAR; C# q7 O& u0 W, w$ E  @9 m
  45.     )''')\" _+ G5 F) W( l$ r$ G\" O\" F
  46.     conn.commit()
  47. 9 z  h\" ]  f; c- j; w0 ]. K& N4 Z5 j\" q# |. ?& k0 C
  48.     host = "https://xxx"+ p0 L2 \0 e0 |; f
  49.     url = host + "/xxx"
  50. 7 c& u6 f( b% R2 l% V    req = requests.get(url)
  51. 2 H, N: J- l( K. T5 i# v3 s    req.encoding = 'utf-8'5 t1 r1 u3 n0 `
  52.     # print(req.text)
  53. + e* _9 C+ ]3 {2 B
  54. & Q2 s2 t3 @& u  v9 {$ ?( b    html = etree.HTML(req.text)% i% ]4 O. A  x* S
  55.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  56. # b  Y% d% g( l& r: x    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  57. # _! O0 D2 p; M4 x1 R! V; s\" [    # print(clearfix, href)
  58. # |/ O$ ~9 q$ x, O! f8 p9 t
  59. 6 @  P! `: n\" _; S+ g- f    for clearfix, href in zip(clearfixs, hrefs):
  60. , R+ f( p. X, K3 F: C        print(clearfix, host + href)
  61. 6 z* G/ d$ J- e9 O' y\" S
  62. 5 L; N0 p3 C4 a% t' C        page = 1) W7 ~* Y& O7 q& ^) p: t$ J  c
  63.         while True:
  64. 2 }\" @, N  n  a6 d9 [            url = host + href + "/list_%s.html" % page
  65. # q8 L- z& ]4 Y* a( D0 H            req = requests.get(url)7 Z\" S4 t+ f  v5 ?
  66.             req.encoding = 'utf-8'% e6 T$ J1 C\" D$ j; f1 Q9 ~4 ?
  67. % I* r2 i6 G& ~7 j, @
  68.             if (not write_sql(c, req.text)):# B* C8 x( I! ]. E; a
  69.                 break5 D8 }! r+ e/ m7 f; I

  70. ' d/ O3 w2 g! A\" t9 D4 ~5 S0 ]3 F            print("第%s页" % page)
  71. ; j: K( F  {9 S8 C0 f) i4 q            page += 11 Q9 t- \1 T& H+ o: x5 t. S! L6 S
  72. 3 _3 X  z/ H2 O2 }+ P* d
  73.     conn.close()
  74. 2 p1 j7 @% y: j: K: b: i

3 x% y+ l/ G6 o5 _+ p& F5 k, h" x7 xxpath用着就是舒服~$ O3 ^; v8 D6 i2 s0 X- J8 g
: ]" V8 S$ C) k3 ?9 O( A8 W
转发自派生社区
Python交流群:1047602540

5 _+ j: g: F% b! I2 O9 y+ G
- h' g- v  L" S9 u5 x! B$ b; N' Z8 C# 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 11:23 , Processed in 0.405284 second(s), 50 queries .

回顶部