QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python# [+ d/ h4 @0 N3 M
  2. # -*- coding: utf-8 -*-8 I# `$ P& u& l  j\" {3 w\" W

  3. / g! S) R! N' T: d) B5 d0 |import requests
  4. 8 J+ z! n) }7 `: a, [\" Nfrom lxml import etree
  5. % t. [% h' I. P; o6 T, fimport sqlite3; P2 y; q+ F\" [/ m7 d% i/ x' c+ N
  6. $ q4 v  \\" {' N7 R2 y

  7. / N  F) n/ }4 _$ H\" Cdef write_sql(c, text):9 W4 o9 Q\" s! K+ \5 a& h
  8.     html = etree.HTML(text)- J. F: v$ C( Z9 n* v
  9.     # 标题3 O' p& d2 B3 }\" ~; @
  10.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')& W; g: _+ |# `2 u: {
  11.     # 链接
  12. 7 M\" l( O3 v$ d/ y( A    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')1 R0 H$ W9 i$ {9 L# A7 C3 }  \+ t
  13.     # 日期
  14. / M% Y0 `  ?4 G; l$ e( S7 M5 r8 H, T    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  15. , n8 k% i$ S2 s( x. t2 y# U
  16. 2 m# K8 `$ e: L  D- d8 ^\" Z    number = 0
  17. + I3 }  n- \- Q    for title, href, em in zip(titles, hrefs, ems):7 _7 q! }' C. Q2 x# J6 b
  18.         href = host + href! r7 ?: ~: ]; k, ?4 o4 P
  19.         cursor = c.execute(
  20. $ F0 J. r8 f+ i$ Y            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)9 I\" `2 |* N1 x7 \' G3 ]  V5 Y
  21.         res = c.fetchall()
  22. & O. d! M' K8 d  D. H        # 判断该字段是否已存在! m% |6 s* o1 u/ E
  23.         if res[0][0] > 0:% u8 {+ F% M3 C* q( H7 z
  24.             continue
  25. 7 I- a3 `' J; D/ B+ S7 P+ x5 c2 R, ]' U. \2 g
  26.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  27. * k3 H/ Y$ m( Y7 J5 l0 W            href,: T. M) X, g1 y3 d  D9 @& v2 x3 K* v1 I7 P
  28.             title.replace("\"", "\"\""),  k7 ?* w! R  r* Q5 k3 ?3 D& H
  29.             em))0 q8 @% Z# f4 c# Q/ a5 Y8 c
  30.         number += 1; d7 s. E) V- U+ D. O! ]# c. g. Q
  31.         print(title, href, em)
  32. 1 n, ^\" D- A& Q( v# t2 M, t
  33. . d6 |3 g* s* |: L' H9 o    conn.commit()# A5 {, h# n) P6 P2 y% S# N
  34.     return number > 0/ c5 y, \0 a8 V
  35. 8 B\" V- U  F1 f7 N# `  F- [

  36. ( t: Z* B5 I3 i. z8 N2 Zif __name__ == '__main__':0 \; z\" y& O6 l. G

  37. ; U5 N* T3 W6 W7 k- |' ~6 ^' x    conn = sqlite3.connect("Python-xxx.db")
  38. / N& l3 a7 V* w( [( [9 C    c = conn.cursor()
  39. % k7 w3 j. A4 y2 U1 r8 g/ x    c.execute('''CREATE TABLE IF NOT EXISTS Python (- w2 E0 x6 r: x' c/ m- a# ]
  40.         Url VARCHAR,; y1 C) y. v' C$ ~+ ~# G4 B
  41.         Title VARCHAR,# h$ L# v) D* p, U1 W/ n3 T
  42.         Author VARCHAR) P( f- ~3 b) c, M  l$ Q( O
  43.     )''')
  44. , [- q; k4 S7 I' `    conn.commit()
  45. & |6 t/ i. V/ e! G# X( u
  46. ) t& M5 m6 _2 x    host = "https://xxx"
  47. 2 U9 c4 A( ~# B8 H4 u7 g# |    url = host + "/xxx"
  48.   r2 v+ I) P0 [% _8 K# U' W    req = requests.get(url)6 R) A6 \! y' K5 g
  49.     req.encoding = 'utf-8'
  50. 9 l9 T! H\" m; Y) Z; p0 s! _\" h8 P    # print(req.text)
  51. 8 S& T1 f! \- O) y$ h3 T5 k  a6 S8 L( g. k4 Z7 `
  52.     html = etree.HTML(req.text)$ l1 ^/ g7 x) z  L. B! S
  53.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')/ \- F& h' S6 H2 E. `+ M
  54.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')8 h- z. U/ P$ E2 W1 X# `
  55.     # print(clearfix, href)* l, D: S9 \6 _6 m
  56. ' `. f' j7 }  Y\" |% |
  57.     for clearfix, href in zip(clearfixs, hrefs):  M# I2 f\" u8 u4 W# I
  58.         print(clearfix, host + href)8 k2 d3 v) \/ f( x7 R& `2 L
  59. 9 m) F6 T4 ^\" \
  60.         page = 1) ?( n5 s* o- y+ D9 [/ V& c
  61.         while True:
  62. 5 u* a\" P! |% s9 |! J            url = host + href + "/list_%s.html" % page( z+ F% C& s+ x; `5 m
  63.             req = requests.get(url); x9 m0 s7 j- P* y! t
  64.             req.encoding = 'utf-8'3 n$ C5 b( c1 U% [: k: R7 V
  65. + O+ t4 I& M: j# M+ d
  66.             if (not write_sql(c, req.text)):\" z- w. L% F/ q4 y0 V% I
  67.                 break
  68. / S( q6 V6 g2 c7 M6 X\" b! _
  69. 1 d; C' I0 f9 p6 P0 ~% o8 d            print("第%s页" % page)
  70. + b8 r+ g! ]\" c$ ~7 z4 ^            page += 1$ {# c5 \. M5 q& P8 {0 F
  71. - L5 \% L1 A2 D. S) v
  72.     conn.close()
  73. ) X' Y& ~8 k+ h\" j
0 k9 R! ^) z% p, V' x: N2 k$ j* A
xpath用着就是舒服~3 R; C/ z& G, @6 x

8 C$ F3 ^& x) t
转发自派生社区
Python交流群:1047602540
9 G" p" r$ ?1 L: v

9 g' y3 B4 F& J& {3 m. s7 n4 |* t- L
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 20:31 , Processed in 0.372542 second(s), 49 queries .

回顶部