QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python9 j4 N1 X2 h$ h) O9 p
  2. # -*- coding: utf-8 -*-
  3. 8 c( }5 R9 G7 }$ n\" ~3 G1 |$ `) V' ?9 N! q# B/ K
  4. import requests
  5. ; ]9 R* x; {2 l& n7 s# ~from lxml import etree
  6. ) ?- Q7 N# `, T1 J5 F- q6 d6 Y6 pimport sqlite3
  7. . s1 e7 j; r/ ?  Y' U0 C/ f
  8. % p9 q( Y( G: J  z% l
  9. # J7 k! g- P& S( s' |; @( j) j9 V3 Ndef write_sql(c, text):% @9 e  `8 r# C$ j) V
  10.     html = etree.HTML(text)7 E+ e8 e9 q9 X% C
  11.     # 标题
  12. ; e, T( r\" C5 b( E% X1 V    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')0 `: w. I! N6 j$ U6 B7 ~9 o
  13.     # 链接3 ?7 j5 \' z4 V# ?8 h7 e
  14.     hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')8 w- g7 j, {* O+ z
  15.     # 日期
  16. & |6 K( x' p\" b( Y! M\" J    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  17. ( ?; y- t# U' y\" f8 M8 A
  18. ( W/ s9 H9 a\" G! I) x! c4 `# ]    number = 0& v6 \+ ]\" K' S' ^) f; r! i: N0 c0 E3 r
  19.     for title, href, em in zip(titles, hrefs, ems):+ v% x: ~0 n  `7 b7 j% D
  20.         href = host + href1 I6 _7 E: l) O\" Y9 H, j
  21.         cursor = c.execute() ]% V3 @# H* H% V; d* }  V\" {
  22.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)- I. D7 o. b! {2 |3 b( ^. i- p
  23.         res = c.fetchall()# `; c! m1 ^9 b( {
  24.         # 判断该字段是否已存在
  25. . ?& _- U/ y8 m! `* ^' g( Z        if res[0][0] > 0:4 Q5 h% }* I+ o% u- w\" o) K  W* ~
  26.             continue
  27. 8 l) a( }+ l9 k% D! M  l
  28. + G8 {% S' c6 j' E7 Q        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  29. 9 Q  t8 j3 x, G\" u% _( h            href,
  30. 7 G  Y- T+ C( Q6 K( K7 v            title.replace("\"", "\"\""),
  31. . ]; m) m3 r. \* R) z/ e6 g            em)); |& b% r1 i! k' ?# `
  32.         number += 18 c: Q6 V\" D! _# o
  33.         print(title, href, em)4 U5 \9 {) v: P1 ^2 M
  34. ! W, \) \% S$ [  Y\" B% A
  35.     conn.commit()
  36. 3 F, {3 S1 p$ q* Y4 \/ A- A  |/ i: W% m3 \    return number > 0
  37. ( g$ e$ _$ d0 _' E* ]& [0 W\" ~) w$ K8 ^# ~0 {

  38. ) }5 r+ p+ i8 Q\" w9 [if __name__ == '__main__':- P4 K8 X0 }9 q  X

  39. * E6 o# V* e0 O    conn = sqlite3.connect("Python-xxx.db")
  40. * G. b  q- u  _2 }\" l5 h) Z    c = conn.cursor()
  41. 0 a  B1 m! q$ j& z    c.execute('''CREATE TABLE IF NOT EXISTS Python (
  42. 3 Z5 u* e3 O$ b- T$ t' K        Url VARCHAR,
  43. 6 B7 F& ?' ?8 U, Q( i& J9 s; X        Title VARCHAR,
  44. % o4 ~1 R& m$ K        Author VARCHAR
  45. 6 v9 G0 e; G  l$ |* j0 @    )''')7 ~( x\" H% K# ]* t' p6 h; {3 a
  46.     conn.commit()
  47. 2 |- H) N& A% m* Z* q- M& C8 \$ b! P. J! _1 j; q5 Y8 S7 J8 V
  48.     host = "https://xxx"; `  Z! ]8 C, B/ w/ J
  49.     url = host + "/xxx"0 h8 r4 @: q9 P
  50.     req = requests.get(url)
  51. ! B' @4 K, d! a6 n: y    req.encoding = 'utf-8'( n9 a4 y: g  f9 k6 l, l
  52.     # print(req.text)
  53. ' w, P* L\" z+ s& x; [9 q# n9 H5 d7 r
  54.     html = etree.HTML(req.text)
  55. 6 b2 X4 B& T\" m4 W8 T) B% R$ C1 t\" l    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')$ V5 j% B1 `6 q
  56.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href'): F2 ?$ n) n4 Y5 B  r\" V
  57.     # print(clearfix, href)
  58. ) ~1 [( \; p, R; H
  59. 7 g. V' M* b( d9 O\" Z! f    for clearfix, href in zip(clearfixs, hrefs):* B+ e! @! C$ s5 \% D0 N) Q; P\" C
  60.         print(clearfix, host + href)7 Z- o% U  ^; Q3 r7 k2 e( m' w( b8 a* D

  61. ; A! T6 Y2 R  P' N# f9 r3 t2 x        page = 1- H9 O9 F# e+ X; C. }3 T
  62.         while True:7 }* n( @/ s/ ^; m4 f- `2 R# w
  63.             url = host + href + "/list_%s.html" % page
  64. & ~& E. A6 o1 Q3 B8 c* y% [            req = requests.get(url)
  65. 4 O3 L! X! X  h            req.encoding = 'utf-8'
  66. 6 H) r8 V! d$ q% {, `
  67. . E; `, B. c% O2 ]$ ?3 X9 w            if (not write_sql(c, req.text)):
  68. * P# d$ i1 U5 H  q                break
  69. & f- \# @- j) c2 T* w& x( \7 ]- P
  70.             print("第%s页" % page)
  71. 7 g0 |. Y, D/ M; E            page += 13 T6 M; I8 X5 M
  72. ! I: `# T* i1 R3 _2 t2 h\" E2 K
  73.     conn.close()
  74. ! b( {* x  P5 L/ N

& E9 ?8 B+ R- k. X, X' _. wxpath用着就是舒服~3 N1 _% {0 E# u3 t; }

; q& k% D, l6 A7 Z6 X5 s
转发自派生社区
Python交流群:1047602540
4 Z  H9 Y, h4 }8 _1 z" V3 O8 s

$ B; R( ^% d2 k0 N" c( m$ y
8 t1 w5 c, b; R0 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, 2025-8-19 16:33 , Processed in 0.402740 second(s), 50 queries .

回顶部