QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 8 R+ R( k' w5 }- q7 B! T3 s& F# -*- coding: utf-8 -*-
  3. + V6 l1 b# ~# N
  4.   ]& C) Q) D4 @# T- m2 o. Y; himport requests8 [/ R0 Q+ W* ~* l0 c9 O8 B* H
  5. from lxml import etree
  6. - r: D6 Y* A9 q& \import sqlite3; k1 h2 ^9 C\" |9 K\" A. W

  7. ) s* O4 L/ a( r9 ]\" m. v  p1 \8 u& Z\" T5 x# `5 j
  8. def write_sql(c, text):. I  f' M4 x5 ?\" O, j
  9.     html = etree.HTML(text)
  10. 7 s' `; J5 ]; _  ^, [; S5 [0 J    # 标题
  11.   y, j( Z% ~! H3 q0 Z    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')9 S7 c+ m- S- |2 ?5 M
  12.     # 链接+ K. p. n- [# G  y- Z
  13.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')7 R, x0 N$ ?* \% R3 m' m9 Z) y, A5 t4 J
  14.     # 日期
  15. 8 ]0 o3 h) b7 A7 v6 l& x. |    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')1 ?8 A5 }% H7 e
  16. 4 c0 i& g6 X) g* j! F  m
  17.     number = 0# i+ w3 w$ m' n0 a9 C' ~
  18.     for title, href, em in zip(titles, hrefs, ems):
  19. 5 l$ @% p0 O* `        href = host + href% g6 _2 r7 m. P. _\" Y9 b
  20.         cursor = c.execute(4 g4 F\" E- I) ?2 C  V+ L- M! p
  21.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. 0 a! R5 y& E; A# z\" O; Q, ^        res = c.fetchall()
  23. * i4 p3 z( I+ U$ A1 `        # 判断该字段是否已存在: d1 w  V5 I, q5 l9 {
  24.         if res[0][0] > 0:
  25. . h2 R+ r1 W7 s4 o- K/ f            continue
  26. + w. a7 {+ _7 n$ K( w3 f\" `$ m* `# j6 B3 I' t\" [+ K; }
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. 0 J6 T* t\" q\" ~2 K$ n& s\" N6 V3 Q) p            href,
  29. . |3 b# c1 q# q- v            title.replace("\"", "\"\""),
  30. : j9 i8 z5 N6 D            em))& c! ^, c! Y- c' c5 L/ f# O
  31.         number += 1/ K( Y* d5 o/ j1 M# X$ N
  32.         print(title, href, em)
  33. ; U2 J' U1 I& y3 p' ~$ m% Q1 N% |8 J0 o8 j& |% I5 I; S3 A: b
  34.     conn.commit()
  35. 8 j/ Y  z8 v# o& V6 k3 a    return number > 0
  36. . S6 x4 b5 x6 G: F* i. q  e: k\" `. K
  37. : |. {% d: ^+ Y
  38. if __name__ == '__main__':
  39. + f5 Q- [+ I& T% H3 |6 v- ^+ ~
  40. , h9 }) M8 ~4 T6 ?. p    conn = sqlite3.connect("Python-xxx.db")( f7 k4 I) E6 y, X* h0 Z7 S
  41.     c = conn.cursor()8 j. t\" D! l. Q: @7 e: [
  42.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  43. 0 Q) O+ D2 N8 I$ i% w6 U        Url VARCHAR,: D- w) w\" A8 n\" @# t. C, \
  44.         Title VARCHAR,# ^  L( I$ X% K% C0 O% G
  45.         Author VARCHAR2 ^! k  @6 S4 J4 x7 C
  46.     )''')
  47. ' r( [) z. t' f$ l+ U' ?  k    conn.commit()* I9 N# ^1 `: y7 s/ {

  48. & b( b  r0 H& J. D7 S    host = "https://xxx"' _0 ]/ K& c5 k7 ]5 C, A
  49.     url = host + "/xxx"
  50. 2 U# H* I$ g$ m4 R* p- a  p    req = requests.get(url)7 [; F% c# I! F  U' H: r
  51.     req.encoding = 'utf-8'
  52. 2 i8 f1 p* Z5 `6 b    # print(req.text)
  53. ' z$ Z) J: i- @2 G  ~. i\" l: S7 c4 x- W+ V1 n
  54.     html = etree.HTML(req.text)
  55. ' h6 ?1 F8 C6 |    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')' C: a5 I, k- s3 c# e1 T7 N& W
  56.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  57. # N* v, C; \; e# I    # print(clearfix, href)- R) u* i% T\" f2 M+ [$ c

  58. & X2 m) P4 y3 E% z& [, G5 u+ ~    for clearfix, href in zip(clearfixs, hrefs):! A7 m* g; c0 W4 U; v
  59.         print(clearfix, host + href), B/ U* p2 r6 I

  60. # P. |% \+ F, o5 l3 F        page = 1
  61. ) n0 z\" H* t* y5 [3 a        while True:
  62. 5 X: P& m! ^( |$ `+ n            url = host + href + "/list_%s.html" % page
  63. % h1 Q; P\" G/ `8 y$ I, y' R            req = requests.get(url)
  64. \" b- d6 V* ^& P9 ]8 P            req.encoding = 'utf-8'! p5 h4 X* W4 q/ Q5 Q

  65. * D\" y, L* g6 L7 L: r* v            if (not write_sql(c, req.text)):
  66. 1 B0 T% @; R1 ?; X; Q' X8 \                break0 P' q\" z. L: \( Y6 r
  67. . r. _6 [. \3 y/ H* \# V2 J8 j0 u+ Q
  68.             print("第%s页" % page)
  69. 8 T. h, E, E- U2 e            page += 1
  70. 3 ~* G' t$ y% ^; V3 d. r5 F9 {: ~4 ~
  71.     conn.close()
  72. * ?2 p1 @+ \# f. I

/ \- m) @* u7 i0 r1 qxpath用着就是舒服~
- j% l" C7 ]4 Z5 L# A' y: S
4 z3 y! w+ a" t
转发自派生社区
Python交流群:1047602540

/ e) L+ F" e3 T9 s' L+ ?5 R* A
% K. h3 X+ K. e- j- U% e8 ?8 Z" K9 E
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 06:25 , Processed in 0.621385 second(s), 50 queries .

回顶部