QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python# O2 P. `/ @% G) ?
  2. # -*- coding: utf-8 -*-
  3. , ~9 n) E% z\" I9 w4 x7 S
  4. % U' L! H7 m: g, t- Gimport requests
  5. \" ^( ]* L3 L3 K: j/ W. Z0 ofrom lxml import etree
  6. \" n, M* h3 i5 u2 S4 [import sqlite3
  7. 3 H1 |7 w+ o0 ~( v! ^\" @5 w
  8. / k' w# a% k; f& d5 M: j* I9 v  Y; Y1 r, U
  9. def write_sql(c, text):
  10. ( t; D+ I. v# w3 g7 H    html = etree.HTML(text)8 r$ G: t8 x  I1 D$ L
  11.     # 标题; z/ L' _+ E. T9 j( I- R\" [
  12.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()'). Y6 X) L7 M\" g' R5 u0 Z) R
  13.     # 链接
  14. 6 F- @' ~* u; x) n6 s( G$ I    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')5 y9 ?) h5 n+ |/ T& q4 x
  15.     # 日期
  16. % F1 b2 p# s$ y9 w    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  17. / j5 {: X% M# ]8 a! v9 s5 Y$ q\" i1 a) s& m& {: a! M
  18.     number = 0
  19. ' `3 j5 y6 `4 ~1 q& K8 F    for title, href, em in zip(titles, hrefs, ems):
  20. 3 p! d( v5 O! _        href = host + href% x0 ?( h% m' ^6 J! }* D4 i
  21.         cursor = c.execute(
  22. / b9 O0 K+ L' o& a            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  23. : X) d2 d* h% f2 [6 p        res = c.fetchall()
  24. ; \  m/ u5 f4 N' ?        # 判断该字段是否已存在. ^- P  V' G& q\" p3 }
  25.         if res[0][0] > 0:
  26. $ U) b4 D: E7 K( w0 X1 E0 v: k            continue
  27. $ F( i5 O2 j: o
  28. ( n5 i6 t9 P3 k        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  29. + o& ~1 a# z# d7 M1 L8 Q            href,
  30. 9 A* Q# p  I9 R$ g\" @/ Y$ Z            title.replace("\"", "\"\""),0 T) a! C, \; }: S
  31.             em))% N3 o% w( r1 l! u, ~
  32.         number += 18 @5 B; m1 j* ^2 L8 d8 d, y
  33.         print(title, href, em)3 \( J& X9 s0 [) J  ]$ O3 i3 Y

  34. 7 ]! k% J8 i! b    conn.commit()0 L; J6 q2 [* G1 u# g+ t6 x$ }
  35.     return number > 0
  36.   J, j+ o! w, i$ B! F& m# f  V) K& `- n/ k# ~9 j

  37. 8 M3 b3 m! t% Qif __name__ == '__main__':( R: b0 z8 D0 ^* o1 Q) n/ ~+ b5 s

  38. ( i/ v- a- h! I( e    conn = sqlite3.connect("Python-xxx.db")
  39. / D* S8 V. M+ `: I0 `% O+ T    c = conn.cursor()
  40. / @- N: @$ ]1 _4 Y: p    c.execute('''CREATE TABLE IF NOT EXISTS Python (6 N7 f* w: M6 F% ^9 Q
  41.         Url VARCHAR,
  42. 6 G; @  ?  q7 R1 L# `1 E, ?        Title VARCHAR,7 E* O4 W. Z& |' E) ^$ q
  43.         Author VARCHAR
  44. & y. i2 {5 Y0 `+ l    )'''), b5 M  Q% `8 }$ w
  45.     conn.commit()
  46. * i% M* q) D. A' c
  47. 7 ~9 n\" T9 }% W& K2 G8 |    host = "https://xxx"
  48. . r3 u- i8 m, c) R    url = host + "/xxx"1 v: X5 q/ m6 a! K2 Z
  49.     req = requests.get(url)% d- W( u\" U' B+ y: [$ B. g* D- \
  50.     req.encoding = 'utf-8') X) |1 q\" j+ I2 c. T! F
  51.     # print(req.text)
  52. 7 A1 u; Y( k0 V7 [( v% f9 }. R1 t+ w7 m. m+ R& A
  53.     html = etree.HTML(req.text)8 b8 x3 G8 L$ w; n8 h9 U$ \' T
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  55. 0 u8 w6 J( n0 M3 ^0 Q    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  56. & R6 Y7 Q5 ^4 h8 T* S. u5 t6 t0 L    # print(clearfix, href)
  57. ' U( {1 n& r\" C0 f, @, @$ u7 K: h$ ]) r( \& n% e4 N: C1 ]
  58.     for clearfix, href in zip(clearfixs, hrefs):. L* S' |6 K( l9 W1 {
  59.         print(clearfix, host + href)1 C. m) J7 g1 ^. ]% s+ E0 x

  60. % q' ~+ Z' z# {0 Y        page = 1
  61. % J! h, a3 f: A5 |! |+ C        while True:0 N( q# G$ |4 Q) N+ T
  62.             url = host + href + "/list_%s.html" % page: _7 x& t- E: S# G$ i% `
  63.             req = requests.get(url)
  64. ( e' v! u$ _) \, B# E  P            req.encoding = 'utf-8'& x) Q8 l, Q9 X! {4 R# [5 W
  65. + r1 ^\" p  `! T* c5 U( }  T& x& G$ J
  66.             if (not write_sql(c, req.text)):* p& f( E( C, V( g' C$ e
  67.                 break
  68. % \; x7 n8 s4 ^
  69. \" o+ ?2 w: c+ F* E( V0 i            print("第%s页" % page)/ a6 V- X% e6 I2 K0 Y
  70.             page += 18 T! q: H. W' x7 m# U9 {

  71. \" m, ^7 M9 d: m  I) [+ S( M    conn.close()
  72. ; l' e6 n+ Q, n& x

" S! B0 s# |& S4 l$ x- V8 Uxpath用着就是舒服~2 u4 G7 A% F" s2 @8 i! V  f
: T+ @: l0 q- X) t: p& O
转发自派生社区
Python交流群:1047602540
+ a3 B1 W% f4 C/ ?7 m
/ W" e& {+ x6 y- P, z
; H: [: A3 v2 _1 s9 }% X+ o
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 08:40 , Processed in 0.660613 second(s), 50 queries .

回顶部