QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. 9 m& U. w* p9 N/ d% G# -*- coding: utf-8 -*-
  3. 4 |, D& U. s: L\" F9 g  ?8 o$ i7 w' ]; x/ D3 R& F$ ], x0 P1 w
  4. import requests
  5. / s! f* w( U! Zfrom lxml import etree
  6. ' u. ?. |; X4 D1 d# B' j9 Y; Oimport sqlite3
  7. + G* s5 d# ]- Q! t5 ?* N3 S7 R7 Z7 N3 Q0 \& S, U! X
  8. . K, o$ Z6 {( B
  9. def write_sql(c, text):3 {% A3 E/ ?2 U- ?! R& l8 \
  10.     html = etree.HTML(text)
  11. 5 ]  }7 K- o0 X& `: T# Z    # 标题
  12. 8 B: M+ v3 A, ^2 i- a% Z\" j8 H2 G    titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')$ e: @% n& g7 M% d, H
  13.     # 链接
  14. % U* i) P9 n( J/ o! p    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')4 f\" j( b7 a! x\" V8 r/ b1 `. W- z
  15.     # 日期
  16. : o9 F. ^$ |) Z6 \    ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  17. , }9 ^2 k+ t2 c; n8 E\" ^. i- W+ y% ?5 F2 b$ y3 e6 ?- l
  18.     number = 04 W6 Y* B* }3 R\" `
  19.     for title, href, em in zip(titles, hrefs, ems):\" \3 X% x, r) _6 ^8 v
  20.         href = host + href0 W8 M0 R( R. }. q
  21.         cursor = c.execute(
  22. . n/ B+ H. U& O$ q$ }) w7 Y; Z$ V            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  23. 2 x4 N9 Y& ?7 M7 R+ v1 Y* z: a        res = c.fetchall()
  24. / D3 }2 |2 E* E' a8 A% l\" x        # 判断该字段是否已存在- {\" f( [: T\" @\" m/ u
  25.         if res[0][0] > 0:
  26. ' p/ {+ @* l+ l( w            continue
  27. . d8 s& y' S6 \& `' S  i. `
  28. 8 T4 C, T, l0 O8 ]$ F/ k, H        c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  29. 4 Y8 }0 E+ N/ J            href,: |& u1 X3 K3 G4 x/ U/ |
  30.             title.replace("\"", "\"\""),
  31. + V& {\" d\" H% f  _            em))3 y. V  F& f2 Z3 U
  32.         number += 1
  33. ! Y, W# w: G\" V1 }* Q9 C5 R8 U. [5 c        print(title, href, em)
  34. / h$ w  d) r+ d+ k
  35. ) w1 a& b2 }9 k: f    conn.commit()
  36. - q+ }4 k! O1 k# ]5 {- L    return number > 0
  37. ) a5 o, C. V2 K- k4 M
  38. ; m0 Y. \4 ]: D3 L- n6 |/ K  s
  39. \" A# `2 P4 z* S) X7 x1 }if __name__ == '__main__':9 A& ^0 @6 M+ ^; d

  40. 1 L! q2 t+ y  M    conn = sqlite3.connect("Python-xxx.db")
  41. ' {  k: B- v1 H\" x* I    c = conn.cursor()5 Y6 h( O+ o; V. b
  42.     c.execute('''CREATE TABLE IF NOT EXISTS Python (
  43. $ _) t; S+ a. N: M# k& _3 x        Url VARCHAR,9 d# a- Y5 m9 i, T% Z
  44.         Title VARCHAR,0 x& a; S2 z5 l3 q$ U
  45.         Author VARCHAR* K; H% U& v0 ]+ Z( }
  46.     )'''): L3 I* |; e2 w+ i& s) j$ X# @
  47.     conn.commit()+ X( q- m- b, \% I' q+ M/ j7 a- e
  48. & B- L3 k2 d) @! a
  49.     host = "https://xxx"
  50. 8 P. M! O! p9 ], F* b4 x\" r  I+ P/ ~6 L    url = host + "/xxx"
  51. 6 d& T\" ]. m! z% N    req = requests.get(url)% D1 u% N# b5 {
  52.     req.encoding = 'utf-8'* g1 j! M( p2 K+ r+ c( O1 B
  53.     # print(req.text)% v0 L2 C4 b2 h9 _0 b/ Z& @
  54. 9 X5 A' C5 ^, Y$ W5 i( p/ e$ L
  55.     html = etree.HTML(req.text)+ d# k: t8 m9 q+ v
  56.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  57. 7 d6 H) k- K; x, B    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')0 V- ^1 [% f: l7 u  Q: S
  58.     # print(clearfix, href)
  59. 4 k- _8 I) O& b/ Q0 p: ^  p\" T! t
  60.   D) r) U6 ]; E    for clearfix, href in zip(clearfixs, hrefs):( u' T7 [6 i3 m. v+ k6 @
  61.         print(clearfix, host + href)
  62. + t3 Q5 x6 d' K1 F. u) Z1 T
  63. ' M# p6 ^+ g1 U' C: c        page = 1
  64. & Z% q  b1 X: G) I4 @2 C  H        while True:  P: N  _, B4 G, O
  65.             url = host + href + "/list_%s.html" % page5 p- S3 e- y  F  N0 f7 \
  66.             req = requests.get(url)8 w3 p4 R' G: q  J1 o, G
  67.             req.encoding = 'utf-8'2 D- O! }9 z  b  k% c3 Z

  68. ) g\" P; H: h+ B7 p* ^            if (not write_sql(c, req.text)):& i! K2 P' p* K4 B; [0 g4 Z) U% o( [
  69.                 break
  70. ( M9 h; q; \) T+ b5 t6 R: [0 E, y1 ^1 [
  71.             print("第%s页" % page)
  72. + O8 ^# D$ _. `. @% c2 `            page += 1
  73. : h) L\" z9 A$ T\" {0 o- ^1 ?- A3 H! A0 \1 m
  74.     conn.close()
  75. ! h1 E2 ?# g: e6 o0 f9 @6 X5 \
3 ^& s! Z1 u: V) v
xpath用着就是舒服~
: w! j3 |1 N0 e4 W0 L
/ m' r1 `5 e. y6 z& J3 r  |! F
转发自派生社区
Python交流群:1047602540
+ Q, |* k8 U7 a# Y

. a  e1 }4 f  S1 @) F' |8 C) U' q# h- v* M
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-10-18 01:07 , Processed in 0.706449 second(s), 49 queries .

回顶部