QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 4 o1 z3 X* ]9 [1 t) n# -*- coding: utf-8 -*-
  3. 3 }: j+ _; [- @& S. P8 f
  4. 1 \( n: K' ]& b. S( ^* E( L4 gimport requests6 `+ q2 o  Y9 I# N
  5. from lxml import etree7 p3 i& I1 L) N# A
  6. import sqlite3/ c3 K! [: u  [$ I

  7.   A\" I* M* y$ U- D- P9 S
  8. 5 a. h8 z% F. G/ v\" Odef write_sql(c, text):
  9. 9 Q8 m3 w) i& O4 u    html = etree.HTML(text)
  10. 9 E0 ]2 ]7 `  ^3 t: N3 Q  S    # 标题% _/ N\" K$ _* l) ?
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')+ t3 u: f/ g3 G) B: \
  12.     # 链接' B, a& b# e) U0 W0 v
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')# W4 g' k, B) c! a, o
  14.     # 日期0 b0 F* S5 g3 w/ x+ q3 _
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  16. 5 P: J, w\" i( m( F\" g
  17. # w' n6 W- D/ Z, C  R5 W\" P! t    number = 0( H) p' @$ s1 I& H; ~/ ]
  18.     for title, href, em in zip(titles, hrefs, ems):& a) N& ]# g. |/ n) k\" P
  19.         href = host + href! l! [; H3 V\" v
  20.         cursor = c.execute(3 z$ b7 @' G% B. X% G( n, R) |
  21.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. 9 K' Q& I  m  d  x        res = c.fetchall()( @+ q& r4 a/ d
  23.         # 判断该字段是否已存在) t8 N1 l: Q# [+ z5 B: [) v
  24.         if res[0][0] > 0:# S7 q+ h+ t% z% X. X, |& N
  25.             continue
  26. . @1 ]9 M5 q\" K1 u# V+ s( F4 N$ b! _. e
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. $ c- r$ v' C! w            href,
  29. . d  a7 b( [5 @0 p7 D! A% C            title.replace("\"", "\"\""),
  30. ( t6 W9 S: t+ ^! d4 N\" S1 \            em))
  31. ( ?6 i4 I; L  b2 L        number += 1
  32. ) c7 d6 P( v6 o: H6 p5 h        print(title, href, em)# k( G5 U6 O) _' v; r
  33.   E# T' _% h. N
  34.     conn.commit()
  35. # Z5 k( R' G  C9 y5 i    return number > 0
  36. 2 i3 R4 B8 N! y) C
  37. \" Q; y. v6 p6 V: T
  38. ; s- \& m% r( Q$ R: ^/ e% m& iif __name__ == '__main__':' n8 K% i; D7 q# C! I! g+ M
  39. 1 i& K- X7 T7 Q- U* H; F
  40.     conn = sqlite3.connect("Python-xxx.db")
  41. & }# R, e7 f( Q: @9 N4 K    c = conn.cursor()
  42. 6 Y! ]- P; k: Z. @/ }    c.execute('''CREATE TABLE IF NOT EXISTS Python (0 k! e1 Z+ {7 D2 Q4 Q5 t5 l4 [
  43.         Url VARCHAR,
  44. 4 d4 y* o3 T% S1 B3 d( @  u6 G# R        Title VARCHAR,
  45. * t8 h8 A2 k- U# j4 s        Author VARCHAR
  46. : i# A  L4 P; I5 b! O; ^& p! N/ l    )''')
  47. ) ]( g9 k6 C2 ^. B    conn.commit()
  48. , T: {6 A, c: h+ T2 Q/ ?* y! }( [) C3 U
  49.     host = "https://xxx"- j8 V& f  T9 R$ ?  R4 `/ q
  50.     url = host + "/xxx"( e9 P1 F) _\" B! t6 T8 j; r
  51.     req = requests.get(url)& Y  g; `* m' @1 j/ w
  52.     req.encoding = 'utf-8'1 x9 T) P. ?* J$ J; {2 |8 w2 c/ l
  53.     # print(req.text)# o9 x; R% D# A) S

  54. * |  F4 l' h2 v\" f    html = etree.HTML(req.text)7 T+ z+ `8 C# b3 Z& v  {1 H( _
  55.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  56. + Z1 b( h3 ^\" C6 J3 }# E7 Z- v% [) f    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  57. 0 g1 ]: Y; _+ T: D1 j    # print(clearfix, href)
  58. + H* U8 v1 K4 V# _$ {7 [; l3 p8 `( V' p* S: z% f  `
  59.     for clearfix, href in zip(clearfixs, hrefs):6 `  x2 g7 s, D7 Q
  60.         print(clearfix, host + href)
  61. 7 A8 L# m% `  i# e. `2 X! K8 L9 O  n6 q
  62.         page = 1
  63. 2 y/ j6 U! n3 l1 H4 h        while True:
  64. $ \4 Y$ y* J$ u: r            url = host + href + "/list_%s.html" % page
  65. . g% [/ h9 i( P1 W8 ^4 z            req = requests.get(url)
  66. 0 f/ W1 }+ y, [\" L            req.encoding = 'utf-8'+ |# `6 n) A6 M, G, ~\" B
  67. : N: T) F8 r\" j7 ^+ ]; z
  68.             if (not write_sql(c, req.text)):2 O$ A( a% y! T0 V5 n
  69.                 break  J- Z' n8 F+ W1 Z/ I1 }# u

  70. ( [6 D. p8 s  |' K* u            print("第%s页" % page)' T7 h5 \* F/ Q$ a, u' m
  71.             page += 1
  72. , V\" O8 D+ f/ |& f  O, ~
  73. \" V# o4 W) |# X0 H3 l  Q8 F    conn.close()7 Y6 N, k) v/ o6 t9 v

, d) S5 \" C# \8 F1 e& pxpath用着就是舒服~8 ^4 o) T8 t% R' S
) I( y, J: x+ W
转发自派生社区
Python交流群:1047602540
7 E; ~1 q- d! I, e+ O( v

9 Q8 c* y: _3 d8 G8 [& g  X) g
1 q7 K& [( r* w5 Q* h3 ?
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-6-3 02:38 , Processed in 0.364176 second(s), 49 queries .

回顶部