QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. ' n8 h$ Y% _\" [# -*- coding: utf-8 -*-' Y6 A$ Z: l& m' b

  3. # J7 _3 s$ |, b1 c. M& Yimport requests
  4. . W5 t\" n4 f6 Mfrom lxml import etree
  5. % j8 ^+ l2 n* G4 b8 I  \import sqlite3
  6. ' @# |+ N7 o- n6 m  B  F
  7. & G: e& }& |* T' }2 I$ E) l  f, d/ n4 T! [! _( _: E9 X# {) [6 x( K' K
  8. def write_sql(c, text):; z! u7 Q5 a\" S9 T6 {
  9.     html = etree.HTML(text)1 R2 g6 S/ Z2 j0 u/ m8 H
  10.     # 标题  b) x1 R9 @' w7 e
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. 7 n* W1 t' l1 F7 e; L0 x    # 链接+ v* t- i2 u- i
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href'): h4 _& |- ?; _& c
  14.     # 日期; h/ u/ R$ K# A) ?* Q- I
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')+ ]/ v! i: p' D5 m% p
  16. ! |* A7 P/ ^% }5 ?
  17.     number = 0
  18. ! L$ P! D( M) g4 I    for title, href, em in zip(titles, hrefs, ems):& C! V. M5 W$ m' @5 P
  19.         href = host + href7 \+ T, l* M8 |9 D* E9 l
  20.         cursor = c.execute(8 T; t! D- |0 I) S( O2 m! h
  21.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href); g! j1 |' l' u1 G' W\" n
  22.         res = c.fetchall()
  23. 8 P, V- l5 y0 _1 _- q: e* H; O        # 判断该字段是否已存在
  24. / m4 ^3 \4 e& _  _% @% m- i\" h        if res[0][0] > 0:# P; ?! E( {) C* @) |( X3 ^
  25.             continue
  26. 6 ], [' T9 ]: Q4 W: l
  27. 2 ^5 R. g. t5 y* Y( G) P$ o* K        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. & d7 |2 B8 [7 f& J            href,
  29.   h7 b3 w) o  A3 c            title.replace("\"", "\"\""),
  30. ! N- y; j+ x1 R$ c4 N            em))
  31. . f0 z* {& _% m8 s( `7 R$ |        number += 1
  32. + X3 U+ j+ j& _9 }' ]6 ], |3 l- M: C        print(title, href, em). e! [/ S+ k% r

  33. - }' e  A9 b  \\" {    conn.commit()
  34. $ b7 u; U& `/ r: i0 y3 T    return number > 0/ U, |$ J1 ]# J  t! u, k0 c
  35. - e5 `: X( Z: c3 @+ R% b

  36. 5 t0 Q- }9 t2 _0 @$ B! {; I8 Bif __name__ == '__main__':
  37. 0 |4 w+ h. e\" ~; ~1 D\" v
  38. ' C9 j8 K( {, B    conn = sqlite3.connect("Python-xxx.db")9 b\" i) g% R/ F5 [- s$ Q
  39.     c = conn.cursor()+ ?\" o' v6 ^# P& W$ u
  40.     c.execute('''CREATE TABLE IF NOT EXISTS Python (  W% ]& N\" U7 Q, `% l, P- L) n9 b
  41.         Url VARCHAR,
  42. 7 r! L% C3 M9 X- H  ?. n/ _: X* Y        Title VARCHAR,; ]' e( R8 H3 X' Q2 y1 a
  43.         Author VARCHAR# q/ p) Y0 h$ V7 v, p\" k
  44.     )''')( o* g0 A8 a' v/ o+ K* F
  45.     conn.commit()
  46. 8 z; _+ M, |( X1 I2 \( T( S2 A4 k% n. h5 V7 |$ R
  47.     host = "https://xxx", s: Y: q% x/ B/ v
  48.     url = host + "/xxx"
  49. ! E' K# r# K* N) c: P    req = requests.get(url)6 G% Q5 [\" q1 a, e6 ]9 q. u
  50.     req.encoding = 'utf-8'
  51. 1 A; f9 `+ p. e  [7 Y    # print(req.text)0 \$ Z8 v* k1 ?) R, H

  52. - @5 c7 u! R4 a; e6 h7 D    html = etree.HTML(req.text)
  53. ! I: F0 |! O; `    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')- Y8 `( l- S0 E3 l, M& R8 f  N7 E3 Q4 B
  54.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  55. , S6 b2 `% l# v/ u\" e+ g    # print(clearfix, href)
  56. ' R: x2 ^7 u) X4 P4 {4 \\" y, h/ e, D) n
  57.     for clearfix, href in zip(clearfixs, hrefs):
  58. 8 g' v  _9 X4 l$ V, ]        print(clearfix, host + href)
  59.   q0 k. j! _3 Z: V
  60. ( Y* w+ y\" h. V) W- j5 x        page = 1
  61. : Z8 J4 d% `\" I        while True:; K\" R1 ^0 G4 ~\" W) R$ |& ?
  62.             url = host + href + "/list_%s.html" % page, L8 y0 R: s% N' x, m% ?
  63.             req = requests.get(url)) ~6 N' t/ u9 c
  64.             req.encoding = 'utf-8'
  65. 6 {5 V: P5 Z3 w9 X8 R% y; E7 V( I4 O0 F$ U8 _9 z  d
  66.             if (not write_sql(c, req.text)):
  67.   X/ s3 [1 a; K1 i- N0 J, X8 @! \! [  S                break
  68. ' Y5 t4 q0 m$ H* c# A
  69. * r: E: _& f\" p            print("第%s页" % page)4 X. C& P* u6 x
  70.             page += 1
  71. ) j3 @3 g& Z. ]\" `4 p; o) j  O, S& j& n5 X- F7 v
  72.     conn.close()% _% I$ P* P- v( l- J
7 |2 R, W' Q& D! z9 R
xpath用着就是舒服~
+ z3 }/ e1 \4 K  m: [8 T. p. [2 p7 `& Y, N2 w4 Y2 W
转发自派生社区
Python交流群:1047602540
3 Y) M! N4 K7 r8 A

1 F; B$ `" W4 L. I0 g
0 W8 a- h& U, e/ f# W1 a- Y
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 03:47 , Processed in 0.405466 second(s), 50 queries .

回顶部