QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python! b: ]& ?& ~\" a# O
  2. # -*- coding: utf-8 -*-
  3. ) [* h/ Q. ?) W, p+ V; a' e( K7 }# @\" n& X0 ~. M& a+ @* i
  4. import requests; _$ e9 d# z1 [3 T6 r
  5. from lxml import etree! ^/ F2 M5 k4 ~8 R
  6. import sqlite3
  7. , o& m5 Z, u; P: z* }8 a
  8. 2 F7 r6 R7 m+ W! u2 Z  C5 N: c; L5 Q, ]/ d
  9. def write_sql(c, text):
  10.   v; E' f$ M& Q, f3 D    html = etree.HTML(text)
  11. 8 @: {% L  b- a\" N    # 标题3 }( N4 t! D7 D% v, h
  12.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  13. 1 k& Y' G' f$ p    # 链接
  14. / L0 q4 X+ K! T/ C0 w    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')
  15. 0 U\" k& Q3 y7 d5 N: w: K    # 日期3 p7 w. E7 h/ ]- N
  16.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')$ L\" a% }. ~+ g8 C

  17. 8 R+ F6 P, G1 o    number = 0
  18. - x4 B. f; R2 V; k$ D    for title, href, em in zip(titles, hrefs, ems):5 e# q. ]/ L# Z7 K, u: O3 R4 o6 }3 e$ |
  19.         href = host + href
  20. ; U. b7 }! j' b% w        cursor = c.execute(
  21. . B' @# [2 s  a# R            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)9 f8 s% ^& ], e( N
  22.         res = c.fetchall()
  23. % g\" P, G) h) d\" K+ o\" Y/ i        # 判断该字段是否已存在
  24. ) O! M, X; J$ s/ A& i        if res[0][0] > 0:2 @1 z* }; n9 n\" {
  25.             continue% r6 [; K. k/ F; ]/ D3 W& |- L

  26. 2 h5 E; C# Y6 ^6 G9 B        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (7 W/ S3 z9 v. i0 c3 P4 F
  27.             href,$ s6 _7 [/ j. W) b# N( L
  28.             title.replace("\"", "\"\""),\" Q0 U+ _/ G# |1 [
  29.             em))
  30. ; l1 R% }* q; C1 e4 ]3 [        number += 1. ^' G) {# t6 e\" d7 l# [* y
  31.         print(title, href, em)/ |3 P+ v- r8 J' G( Q; P

  32. 7 M: Y$ q- P) U$ S2 M& T  U9 u    conn.commit()/ w\" r' E9 j4 Z, w\" |; i9 r
  33.     return number > 0
  34. 7 l1 H% z9 C+ S1 g) [: |6 J$ x( E% j
  35. 1 H! Z% L7 \  V
  36. / k5 o* b2 t& G4 n- C5 M- Mif __name__ == '__main__':
  37. * I1 G/ D# t  {8 j0 Y9 Y1 i+ Z8 j\" h+ k) K. M# f0 [' H  f  s0 O8 {
  38.     conn = sqlite3.connect("Python-xxx.db")' w- |\" j9 ^$ G8 i& O) j
  39.     c = conn.cursor()7 u+ U* x; e- Y
  40.     c.execute('''CREATE TABLE IF NOT EXISTS Python (, t- ^2 D  T$ X! s  P
  41.         Url VARCHAR,$ G/ `. W4 b9 C
  42.         Title VARCHAR,
  43. ( Q; b! C. A7 i: U% ]) E# n        Author VARCHAR
  44. / |' i5 R) }( V2 g6 v1 d, q    )''')& j7 S$ D+ g& h4 u8 f\" v$ q\" @
  45.     conn.commit()
  46. 9 p. n/ |; x- p- P& A$ O% ?4 N
  47. + h& D' ^( h' I9 S    host = "https://xxx"0 p' Y; Y# u# Y1 y' d
  48.     url = host + "/xxx"
  49. 2 R9 A\" N: E  J3 P  j4 n    req = requests.get(url)
  50. % }6 K2 _4 ]7 C3 N7 a    req.encoding = 'utf-8': q. W& l0 g2 j: z* L& i
  51.     # print(req.text)/ U' a; k# g  q+ U1 t# H
  52. + U5 H  d  Q9 x; s; S5 I1 q
  53.     html = etree.HTML(req.text)0 H0 n+ A  s2 S) F\" L
  54.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')  E* `8 l7 b# F' Z; S8 v( a
  55.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href'): O/ U* O9 K8 t3 E7 z: W* \
  56.     # print(clearfix, href)) e& E% O& g1 M
  57. / v# s2 s\" f; k\" \% E
  58.     for clearfix, href in zip(clearfixs, hrefs):: m0 Q, Z9 @0 I/ k\" D
  59.         print(clearfix, host + href)7 K6 P7 z- Z! G7 y- `\" Q\" H

  60.   \& P) o2 y9 d) m\" {; B        page = 1
  61. - Q) n  ~9 n  K; j' Q+ {9 O5 Y        while True:
  62. 1 l2 B& u; C0 O) e3 N! [1 L            url = host + href + "/list_%s.html" % page
  63. * j9 i2 F. [\" O; S' o            req = requests.get(url)
  64. ' d3 s: ^* c; K$ Y; v            req.encoding = 'utf-8'7 m8 `5 D1 ?! f( a

  65. 0 Z2 \. h1 c- [3 t; c, I1 @, Y            if (not write_sql(c, req.text)):
  66.   Y& W\" e4 x$ j% S* Z                break; u* \1 z$ x' f' T

  67. / H6 c% j: @. \3 x# z            print("第%s页" % page)
  68. ) l) ~2 F4 v$ E4 e5 s            page += 1
  69. ' Z* y4 s0 _. s. l' Q( b
  70. & C0 x$ b  e, @( ]. w    conn.close()
  71. # F  Y4 D. d8 K\" ~, ~) J
0 Z, @4 P. X% C! F, z# \
xpath用着就是舒服~& Z" _7 C: [- y# }4 v& _; q' P: l

* e/ s6 C; l* |% t' P7 A
转发自派生社区
Python交流群:1047602540

9 Y7 [$ \% s  g& U. G8 S& a, c% N8 Q2 k' Z* ]  b

0 B9 y. s2 ^+ O" q; F
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-4-19 04:58 , Processed in 0.442968 second(s), 49 queries .

回顶部