QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |正序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python
  2. & v6 \0 K1 @- i) F( I- H# -*- coding: utf-8 -*-9 m4 |7 a) b$ _, ]
  3. ( o\" a/ }- a$ A+ x- B% N# [( j8 J
  4. import requests
  5. : z. o\" c& y6 p9 p/ n* _! @, \' D( ]from lxml import etree
  6. 9 U3 _/ \# f* f! |; U& i( A7 r5 Uimport sqlite3# M9 c1 P4 K8 U! r$ K3 [

  7.   s' `$ ^) f. W5 K. A5 J  M# Q+ ?: Y
  8. $ I9 X/ ^4 q9 h8 G! |def write_sql(c, text):0 l$ f, j( }: S- R0 [! [# h
  9.     html = etree.HTML(text)+ u  e' w\" i  C$ b
  10.     # 标题( L; U' T, P4 {5 G
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')
  12. \" n! s8 |# n/ h' `3 R, b    # 链接
  13. 6 K5 I1 G. S! s    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')) V4 e: o! t* K/ T, ?( q/ r6 \
  14.     # 日期2 B3 e9 O9 f- Y& L3 c% c) j
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')7 V( T3 L8 H) X2 z, X% p# u
  16. / w2 K  l5 m9 g, C% |$ }9 I
  17.     number = 05 d& k2 I3 B3 }' v- V4 v9 D
  18.     for title, href, em in zip(titles, hrefs, ems):6 B# l4 O& z. v9 ?. K\" f& f* v9 Z) v. T
  19.         href = host + href/ H+ m! r* p. E9 N( j6 X1 ]; j
  20.         cursor = c.execute(
  21. 4 a. J( o( M( y1 F4 ?9 w* M7 G8 u            "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)
  22. ' Z& F; n& v4 ~6 {+ ]        res = c.fetchall(); C2 D, r7 U7 g
  23.         # 判断该字段是否已存在, W( \, a* i# q9 T! J! [, J! p
  24.         if res[0][0] > 0:6 k/ w2 W: ^' C) D\" W7 O3 F& y* L: r
  25.             continue
  26. 8 Y9 y3 X: d3 b7 l) P- a- b/ d/ ^; F) T
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. 5 S; V1 F6 ^# ^( @9 |            href,
  29. $ w\" E4 R# w8 u0 T8 m1 I+ @- m            title.replace("\"", "\"\""),* Q5 k! Z\" x( `' q8 Q; M# f
  30.             em))  A' T8 r1 c7 b& W
  31.         number += 1! w  F( P+ T* F8 i! [3 g7 H. k8 z
  32.         print(title, href, em)! |5 D& E) N+ V4 H

  33. 9 I3 o; h4 j, r( W1 y    conn.commit()8 O- X9 Y6 ^+ a1 v$ W
  34.     return number > 0
  35. 1 ]# p) o; }! r* \, B4 c' i) V\" O\" U& ^% `* y

  36. 8 `0 m; z  k! C- ]# G7 ^+ {if __name__ == '__main__':& d# v# ]/ S9 B, {; Z% h' J

  37. \" M1 P% i+ R2 q4 I. P* Y    conn = sqlite3.connect("Python-xxx.db")3 `% B& H* K% E\" L  Q
  38.     c = conn.cursor()
  39. : T\" \/ s  Y, `7 m    c.execute('''CREATE TABLE IF NOT EXISTS Python (
  40. 1 ^1 E) ?\" B- e2 M; ~  e0 z' d        Url VARCHAR,
  41. 2 x5 x5 Q6 Y( h        Title VARCHAR,! E, W+ r; h+ U0 H
  42.         Author VARCHAR0 J9 G1 O. b- V6 O6 U5 }, x% n
  43.     )''')8 c& Q  ?0 a- d, ]
  44.     conn.commit()
  45. 0 Q. H' {& i\" k* F: Z) G( D
  46. & n+ m$ K8 r% d$ ]6 T6 @8 N    host = "https://xxx"
  47. , @\" g  }8 B, ?$ a    url = host + "/xxx"; z; u) t5 q- T6 v3 Q
  48.     req = requests.get(url); q: v' Q4 J4 }0 ^1 e3 I0 ~
  49.     req.encoding = 'utf-8'\" A' {* j# h' ~! K' m' F
  50.     # print(req.text)! j6 @. r/ S- r) v  i( l# @2 v
  51. 3 o* D# ^1 I1 p; r$ r7 W  Q9 H( c( T
  52.     html = etree.HTML(req.text)\" `- m0 h1 e0 m% P/ r3 `: x( F( W
  53.     clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')
  54. ' X% @# m  j  f2 `3 Z& }4 S3 G8 }( _    hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')* F1 x! ~8 X5 O$ J' Y, J; q) b
  55.     # print(clearfix, href)
  56. 4 x( K8 I% F+ i# D* I: l5 V; a  u! ^6 X& m! l' c
  57.     for clearfix, href in zip(clearfixs, hrefs):
  58. $ A\" z8 v& ~1 a' R- J. b: v\" e1 I        print(clearfix, host + href)
  59. ' O5 C1 z, b4 }\" G2 \/ `
  60. 6 G\" Y. {5 a; A' {. K0 y* e        page = 1
  61. 1 g# s  U  X\" j% u' S9 g' _/ k        while True:
  62. ' E0 }5 B: i& W3 W) H# c            url = host + href + "/list_%s.html" % page
  63. 8 {3 h' U* c8 l3 j            req = requests.get(url)
  64. 2 l; ^, `+ D  N+ [7 h, Y# M            req.encoding = 'utf-8'* l/ n( m8 {. c5 S6 x
  65. 4 s2 t' f+ O% z: F# C/ }
  66.             if (not write_sql(c, req.text)):4 T% r1 o! M- X1 z% H9 Q\" }' @\" A
  67.                 break
  68. 4 G5 A$ {& t# I4 q$ E, P4 h) ~# T7 @
  69.             print("第%s页" % page)- n0 {0 \. ^5 }: Q5 w8 v* b
  70.             page += 1
  71. . L4 c; E1 ^3 k) F9 E# m5 l
  72. 1 z5 g5 S\" j/ f- m' H  j+ c4 y    conn.close()
  73. 6 I7 O, p9 K  t5 t' u- N+ G' A! B

7 P: E2 z3 E+ fxpath用着就是舒服~
5 D* F$ d, a) E3 P. Q. u6 L1 f( \( }
转发自派生社区
Python交流群:1047602540
) c) \+ e0 S$ Z

' H/ q/ z, x2 B* R8 n8 K, M* r' G7 {) r5 c8 W  n1 V* k5 [
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-20 11:37 , Processed in 0.451553 second(s), 50 queries .

回顶部