QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 4 c$ Q( _& Z  [, y# -*- coding: utf-8 -*-6 a( \9 ^# z4 [, q5 A

  3. + U+ Z  B( V) g4 k1 |\" Eimport requests
  4. ' w0 E4 ?4 P, b& u, u, f4 mfrom lxml import etree
  5. $ D- O4 q- w& `2 f- J$ l$ zimport sqlite3
  6. 7 }& @/ ~) F- S2 A& \+ h9 F$ L* ]. c# d
  7. / V$ n7 v  o$ Q/ g/ X
  8. def write_sql(c, text):& T8 h4 f4 h# O9 D4 E
  9.     html = etree.HTML(text). ^$ {! P$ ~. ?6 n, q
  10.     # 标题
  11. 2 S* k% h8 F! O0 n) e7 ?    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. $ s% f* X! ]7 Y7 _    # 链接
  13. 8 w5 O0 H\" }1 C) K: r% H2 T    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')4 }! I2 P: l! U$ O& P
  14.     # 日期& g% P\" F$ B% `- Z5 q6 C\" u
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  16. % @) G' D0 Y5 k3 ]3 h4 F& {. E3 c* n' A3 w8 q. d
  17.     number = 0
  18. ' l1 j9 E: V. d+ z5 n0 C\" y    for title, href, em in zip(titles, hrefs, ems):9 {; |0 P3 o& j! q( }
  19.         href = host + href\" F. ~4 V! \2 y% {# V
  20.         cursor = c.execute(
  21.   Q1 B8 A/ ]\" S6 N1 O$ L            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. 3 }* D- ~% p  ~\" o\" l1 U        res = c.fetchall()
  23. ' Z' Y9 s& d, {1 @  \- @        # 判断该字段是否已存在
  24. ) v0 Q\" k0 j) Q0 |( B        if res[0][0] > 0:3 w4 c& r\" C$ R9 c% W
  25.             continue
  26. 7 s, w5 U# g) j, ^- V
  27. * K' t6 g  b4 L! s. h        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. , n! B7 Z2 X$ S/ R& p            href,
  29. 6 K+ ~8 ~/ Q/ G/ C* Z3 l            title.replace("\"", "\"\""),+ F( g/ I+ o3 K$ m$ V3 G
  30.             em))6 a8 r9 ^2 Y$ Z0 @# t+ |
  31.         number += 17 I, v3 I' Y' l
  32.         print(title, href, em)
  33. 6 e& a5 L  j4 s* g\" f' C
  34. ( B2 L3 w# c\" i4 b: @0 W    conn.commit()
  35. - f2 |$ O: ~\" J. ^\" w0 u    return number > 0
  36. 6 }0 L! d\" k7 q5 L$ C' B. C
  37. : t# l: r* m6 \1 @5 W' t  e: k
  38. - I  _# k# e: `5 n+ A+ |if __name__ == '__main__':
  39. ( E+ H3 X) T, `3 C% o! V8 [
  40. - f6 l# i5 |+ r    conn = sqlite3.connect("Python-xxx.db")' K: i: d% U! C6 U
  41.     c = conn.cursor()
  42. 5 a6 F- s2 O: I* Q7 h* n    c.execute('''CREATE TABLE IF NOT EXISTS Python (6 ^5 O7 U3 g8 p* k$ t7 k* J
  43.         Url VARCHAR,9 F: C4 ?& X$ V. q5 u
  44.         Title VARCHAR,7 [0 Q( K& \5 b! M5 o: y\" t. R+ _+ U
  45.         Author VARCHAR
  46. # e! z+ x4 M6 j# {    )''')
  47. 8 r2 ~% z# y6 K/ o    conn.commit()
  48. 4 G7 Z5 M) x) [# n& C5 w2 X. d5 A+ F' s4 f! u+ A' u3 r8 p7 T3 B
  49.     host = "https://xxx"
  50. $ F# B+ y+ W) z. ^& {! [    url = host + "/xxx"
  51. ' r: k# S( q\" M$ w    req = requests.get(url)9 d3 k3 R1 C1 u8 [! H
  52.     req.encoding = 'utf-8'
  53. . K$ J% j5 F, t5 F5 ^5 F1 Z    # print(req.text)
  54. . H/ b& P! m, s3 o
  55. . B& J, B( ?( j& z- K5 \7 z    html = etree.HTML(req.text)
  56. , b( R8 n1 S+ S9 f  `    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()'). |( R4 k/ |3 K2 c* |( L* }
  57.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  58. ( I6 g) l6 \: K1 a3 M    # print(clearfix, href), k8 ^8 m5 W( _! B: X

  59. & C% x* H# C1 h8 H8 m5 X: r    for clearfix, href in zip(clearfixs, hrefs):3 W6 c, h6 V: E1 k/ ?9 q: L
  60.         print(clearfix, host + href)
  61.   V7 |6 N# U$ D7 Z' E
  62. * W$ K8 T/ ~- `2 n        page = 18 p. ^) B% s; j; y
  63.         while True:  A  H& j$ p& y& e) ?, h
  64.             url = host + href + "/list_%s.html" % page5 B4 K& }% f6 S$ w- h5 W; \5 B
  65.             req = requests.get(url)
  66. 1 ]/ C8 C- o  D1 |: A$ e- G& J            req.encoding = 'utf-8'
  67. 9 S# s* `# V; x4 v1 \
  68. 2 H8 d6 V6 _& Z9 [0 U) [            if (not write_sql(c, req.text)):) M2 h3 c4 P: P7 m- Q1 t' q1 i
  69.                 break; C9 Y% _3 h( n

  70. , Y$ |; v! g( {\" G2 b8 g            print("第%s页" % page), l+ {& ]& Z' F/ ^0 O8 w
  71.             page += 17 y7 N7 z$ j7 ~- u9 J* q
  72. 5 ^+ C/ I6 O6 ^3 i
  73.     conn.close()
  74. 7 H: }% q0 `, e
% {% \5 G9 \2 ^% Z
xpath用着就是舒服~
& U8 l, v9 h; X: M% [$ R. T2 u" [) l" [6 v) b
转发自派生社区
Python交流群:1047602540

6 q5 w, ]6 W7 o3 L, e$ O
* \% N) ?' h. w# {! o2 o7 A, m3 M' o0 @+ Q7 }5 z! L9 h+ R
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-9-1 18:02 , Processed in 0.410157 second(s), 49 queries .

回顶部