QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python! O8 _' j; P% D2 N6 S% ~
  2. # -*- coding: utf-8 -*-/ j& F  l4 x\" t1 J' k, H

  3. ' a. ~\" }- Z: @7 l, S\" ?* mimport requests
  4. 4 u0 e  A- B  b6 t+ z  _3 ~6 mfrom lxml import etree5 x5 g# j) w$ H
  5. import sqlite3
  6. # v5 y3 m* L' g) Z# Q- z- b\" `6 N2 H\" C7 m9 l, D
  7. : P5 C( p6 a% L$ a# i% h2 W/ J& u0 |
  8. def write_sql(c, text):
  9. 3 X* _( J' v+ l* ?    html = etree.HTML(text); _* H; X\" P8 p
  10.     # 标题  P1 X0 d: s. Z: z
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. 1 Q6 _7 u; R2 K6 t    # 链接
  13. % ?+ U( E  U- ~' t9 I! e    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  14.   v) w! m% @, b  f1 C. m. M    # 日期
  15. ( h4 C& V( r, }* q    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  16. 8 R4 t4 s; N/ g8 b\" i/ O* J1 b9 \% @; ]4 N/ V5 C
  17.     number = 04 {+ a+ g+ I% ]. [4 z4 y+ v9 a: g! t
  18.     for title, href, em in zip(titles, hrefs, ems):
  19. \" e. F( t- o, y2 ^, ?\" K6 G        href = host + href) L7 B6 C7 K$ X\" D; N* D1 T4 e# g
  20.         cursor = c.execute(
  21. . V: `& I& l0 U, j1 D            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. ( @# w& z1 P' P0 k* Y, r\" u. [  B        res = c.fetchall()# q8 g0 ]$ L' G5 A) x# U0 U
  23.         # 判断该字段是否已存在
  24. 6 t% ]/ U4 H5 c* ~        if res[0][0] > 0:
  25. % w* f+ o! P2 v4 ^& r            continue
  26.   C0 P- \. @; \! W/ z+ U# o$ `2 ]; @+ t
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (6 F. O5 ~0 _' l+ A' r2 u+ \, x1 U
  28.             href,7 B% B8 h) w2 K1 I
  29.             title.replace("\"", "\"\""),  d5 `/ {2 h. L\" J8 a
  30.             em))
  31. + Z# ~/ l1 R( i  |        number += 1  F' @* O+ B( D
  32.         print(title, href, em)
  33. ! L7 @- ]) [! |: A  B2 t; _3 {9 p& O/ ~
  34.     conn.commit()! ]0 s4 `+ W5 U# A. L% B1 O8 d! X
  35.     return number > 06 E: d* M6 c- k

  36. 9 J, k1 y* R7 D/ a
  37. 2 f. v5 {6 {& S\" F' x( n) _! _if __name__ == '__main__':
  38. 3 N( m& e7 t. m% L\" k9 D+ T
  39. $ B( Y: z3 L* i/ M+ |    conn = sqlite3.connect("Python-xxx.db")) ^7 }( ]6 o0 O  p$ ^
  40.     c = conn.cursor()
  41. + g! Z0 Q6 Y  @0 [' d5 W    c.execute('''CREATE TABLE IF NOT EXISTS Python (4 m2 X$ p6 A+ w; t( ?4 W2 u
  42.         Url VARCHAR,& [; U* U, R' L2 K. W5 C7 y
  43.         Title VARCHAR,  P+ A  E# ]9 O+ D6 k% }
  44.         Author VARCHAR
  45. 8 A- Y5 S8 O6 P) P! M    )''')
  46. $ k  N: S0 H! J3 ]0 E3 U    conn.commit(): ~  q4 ^/ I) t9 I
  47. ' i$ ~! P' [5 i
  48.     host = "https://xxx"$ r- J\" p! `0 q+ |* d7 r: B
  49.     url = host + "/xxx"& k) Z+ a* M8 ^. w
  50.     req = requests.get(url)
  51. , ^6 N' z* z( g0 B  n    req.encoding = 'utf-8'
  52. ! s0 w, D' d; D  I+ k. n    # print(req.text)0 z! N: `& d- r  V( T  r

  53. ! w0 [\" F( d; l4 T3 e    html = etree.HTML(req.text)) b; @+ S  W% r# ^: P7 I
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')9 H/ y6 |) {: j
  55.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href'). q! |& p' |% j& ?& L' h
  56.     # print(clearfix, href), c4 H1 _; S1 L2 J# M# _

  57. \" w8 S) L, q1 }$ `4 U0 [8 c( F    for clearfix, href in zip(clearfixs, hrefs):
  58. & v7 U; e6 l5 R/ j: S. |        print(clearfix, host + href); J6 F; ^1 d# }! n6 F9 ^\" i
  59. 5 Z: l6 R# p' U$ x! \0 e# k
  60.         page = 1
  61. 5 J' [, H5 P% F5 c/ x$ T% R        while True:) a+ z5 r3 c- y7 N9 m
  62.             url = host + href + "/list_%s.html" % page7 S7 M, |4 X# B# n4 Z, w* h
  63.             req = requests.get(url)* S# x7 H$ r7 P) O; E% s+ W
  64.             req.encoding = 'utf-8'
  65. ( Y! P+ \3 O4 V2 C4 S\" M
  66. 7 G8 N; g3 y5 K4 @9 ]5 P. s            if (not write_sql(c, req.text)):! z/ h& |' m( j' H: f' c
  67.                 break
  68. & E$ Z% Y! g6 M; J
  69.   R  l% w\" M8 |. i0 a            print("第%s页" % page)
  70. : n# Z, {6 W# p: h! D9 a+ I- M0 ?            page += 1( w3 A8 {( l) C& _\" t4 Y% t$ b1 X

  71. \" h% w. ^# t: w5 Z    conn.close()
  72. & L/ v3 Y9 O5 a. j3 D; V1 ]# p
9 j( J- E! T4 P* T; Q
xpath用着就是舒服~* p0 _. w% S. x# q

" o: P! g; R+ U* s) [
转发自派生社区
Python交流群:1047602540

( {: t* l- Q: J, O$ i- T; A5 S- |, p+ I6 `
( j3 Z6 ^$ U( G) K
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-2 16:53 , Processed in 0.411564 second(s), 50 queries .

回顶部