QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |正序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python: E! `% n( s% V+ a+ U% t# P2 ?
  2. # -*- coding: utf-8 -*-
  3. 5 q& k* M6 u  h% Z\" d5 ^( h  F- |3 Q' D  q6 r% i7 P- j
  4. import requests- x6 z  ~# n3 K\" N
  5. from lxml import etree( ~& \6 r, f( v, W- w5 P/ d9 L9 f) W
  6. import sqlite3
  7. \" ^7 M* ^. U  Y3 T8 ^/ _6 ]* U% q! v

  8. - c/ q/ U  Q+ \& Q, |. ^def write_sql(c, text):  N* h1 c* t5 O( V  b4 A
  9.     html = etree.HTML(text)
  10. 7 n  P7 B3 P) a. \6 _    # 标题
  11. 4 e) F( Y* {2 {( W0 O- Q1 _    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')& p( d4 P) y5 x, p( w3 {
  12.     # 链接/ R/ V+ L# Z3 S\" }' a  X: D, H
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')8 T' n5 p$ q: X
  14.     # 日期
  15.   W  d/ O; R% W# m+ W# S2 ~    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  16. ; Z4 D+ s+ F: b* E' }. h' k
  17. 1 z; A* G( p\" ^4 C! h    number = 0. n2 r6 U7 {\" R- o, N
  18.     for title, href, em in zip(titles, hrefs, ems):6 e; }5 _' y3 g1 L
  19.         href = host + href& B( _9 }/ B/ q, ~0 m. s9 R
  20.         cursor = c.execute(
  21. : J5 m. d+ D+ K; ^            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. ( E! C; y, t: R* o2 ^        res = c.fetchall()9 `, \/ D' u. O( x: t& d( D$ }\" L5 J
  23.         # 判断该字段是否已存在
  24. 5 ]9 |' O9 J3 Z. B+ ~% u: H        if res[0][0] > 0:
  25. + B' t: M4 g- O1 x5 Z$ w& B' Q1 J  F$ N            continue
  26. ( Y- z- A4 s* o, J
  27. $ j; x9 r; {& i+ w\" P        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (' a5 H* G) ?9 C1 l& Q
  28.             href,
  29. \" I; j* B% n! d! e/ o+ S            title.replace("\"", "\"\""),  C0 w1 F7 o2 i; @$ J
  30.             em))
  31. # g! e0 ]* s* g! V        number += 1
  32. $ w3 d6 Q% {$ Z+ G4 P) m) G6 V2 g* z        print(title, href, em)
  33. 7 F2 x/ x3 U! O, A* K; d/ Q- g/ Q3 W% l
  34.     conn.commit()
  35. 6 Y% u! r: w7 i- Y5 y  O    return number > 08 }, n7 O8 |# x, W! B

  36. , y! Q- _8 ]3 d8 k6 ^! _0 b3 t* L: k4 _. s: w\" x
  37. if __name__ == '__main__':0 N# d- h  j7 q6 m2 g! P, y

  38. 2 o) ^' J) r' ~3 F4 L* [' @  d    conn = sqlite3.connect("Python-xxx.db")
  39. 4 y; U2 |6 _9 T& H    c = conn.cursor()$ Z2 j1 ~' r! ~\" x
  40.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  41. 5 k+ Y  {# F$ s8 b7 v        Url VARCHAR,
  42. 5 V5 i4 L3 X: ]9 y1 b( j4 x        Title VARCHAR,
  43. ) H% G/ M/ b) Z+ J  r) e/ x9 o6 m9 F        Author VARCHAR# S; [1 E4 q9 _3 Q- R# b
  44.     )''')0 b. K) `$ S9 f
  45.     conn.commit(); M9 z; s* ?\" h% ?  h
  46. 4 j1 q% s' U- ]- C1 Y! A
  47.     host = "https://xxx"' h% Q* q- E9 v% ?5 Q! ]
  48.     url = host + "/xxx"
  49. . j3 }0 W# K  |- ^0 x+ c    req = requests.get(url)9 h1 ~, r# c8 W+ v) O) ?( q
  50.     req.encoding = 'utf-8'
  51. + x. Q# m5 G8 C. _9 m& Y  F6 U& J    # print(req.text)
  52. 6 X$ K- Y. Y1 R3 `\" v' Q
  53. 3 q( I) i6 z( v, k5 C- _    html = etree.HTML(req.text)# @$ m) H7 l- z- U) Y: {4 e' k
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  55. . k2 W  z6 _2 z. ?8 k% r3 j    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')# v+ T$ w$ i$ v
  56.     # print(clearfix, href)
  57. ) p) e: z# B1 I: c0 E1 Y$ C: E$ _% B% N0 f( n# ?) z
  58.     for clearfix, href in zip(clearfixs, hrefs):
  59. : i, a. {7 |* J; v2 w7 u        print(clearfix, host + href)
  60. 9 o0 }$ V; I8 l+ C2 E& z( Z* e
  61. - q& t8 @. ^  c& J        page = 1  m9 h, p6 x# D% s  Z8 o; m# i$ J
  62.         while True:9 V; M' {) u& l1 v* F6 d$ J
  63.             url = host + href + "/list_%s.html" % page9 F, X* W0 x' p  f) T5 A\" _
  64.             req = requests.get(url)$ A7 M$ b: ]6 y( [
  65.             req.encoding = 'utf-8': m8 ]6 y( p8 f( t! |1 G
  66. ( q6 n1 c, l0 z) p, |
  67.             if (not write_sql(c, req.text)):3 Q: H4 i- L+ e) n
  68.                 break5 G  `  l4 P& m\" ]
  69. ! y, s) L; h% N8 ^1 W3 q
  70.             print("第%s页" % page)' H1 W; |, o; D! N. L8 \4 t
  71.             page += 1
  72.   e* I6 S\" b# a2 ]
  73. 5 F2 H+ e8 A2 e+ n' t    conn.close(): G7 p- P: G: p\" z5 V9 d4 G* a& T

' {# S0 Y: f8 e* rxpath用着就是舒服~
; Y! I5 g% n) M4 j4 c
( U: M4 ^+ x& q
转发自派生社区
Python交流群:1047602540
0 Q: s  c% z% i9 H& `) I6 A; v# @
$ h8 W0 l. r, K
! ~3 X" v+ \/ `5 a+ 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-9-1 18:46 , Processed in 0.357975 second(s), 50 queries .

回顶部