QQ登录

只需要一步,快速开始

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

Python-xpath

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

7

主题

3

听众

10

积分

升级  5.26%

该用户从未签到

自我介绍
我本名为我,那就是我
跳转到指定楼层
1#
发表于 2021-1-18 09:29 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. #!/usr/bin/python% l+ R0 @4 n5 _7 ~2 }3 u5 @
  2. # -*- coding: utf-8 -*-5 `2 v% v' r4 @& J
  3. ; A  O. L) f, ?
  4. import requests4 r: ^4 }# ^% W
  5. from lxml import etree9 a3 C$ e$ w% b6 K
  6. import sqlite39 C- e2 p4 o\" M\" L' K
  7. $ P5 q$ f/ h+ K' R

  8. 3 G# E\" L0 A0 u# N& Z# |* l( fdef write_sql(c, text):6 w3 h, x5 P/ j/ K; N' f1 j( V8 M
  9.     html = etree.HTML(text)
  10. 7 ~2 d, K( @* ]8 v5 q3 F7 o; C    # 标题$ p9 B; D, X( X& j. ]\" e3 U
  11.     titles = html.xpath('//ul[@class="news"]//a[@target="_blank"]/p/text()')7 W& r$ y, \4 `5 z
  12.     # 链接
  13. # G+ S2 @9 Q$ z/ p    hrefs = html.xpath('//ul[@class="news"]//a[@target="_blank"]/@href')4 B) D  K9 A; h( a' T\" ]
  14.     # 日期' M2 u) p3 }& A' f$ P2 |8 X
  15.     ems = html.xpath('//ul[@class="news"]//a[@target="_blank"]/em/text()')
  16. ! ^+ y, G3 |, y7 H$ L! A: I
  17. 1 Q\" p8 z4 K5 Z\" D$ X  i    number = 0
  18. 0 t9 @& g$ H! U  d3 a* D3 o& a6 h    for title, href, em in zip(titles, hrefs, ems):
  19. - Y* F- w  J) ~, _/ {1 s- b& v        href = host + href
  20. 8 I9 e8 Q0 O2 c. p$ `, u        cursor = c.execute(# y0 w/ g7 u9 ?0 W
  21.             "SELECT COUNT(*) FROM Python WHERE Url = '%s'" % href)\" a/ T6 s: E) U! f/ [: h
  22.         res = c.fetchall()
  23. 4 K; r7 f7 U* ~& r! T9 }- ?        # 判断该字段是否已存在
  24. 7 t! I9 E% M. }        if res[0][0] > 0:' [3 x& d7 j! b, V' N! k
  25.             continue\" t0 k, s' l* p& N
  26. 0 Q# c' v* W) f% R
  27.         c.execute('INSERT INTO Python( Url, Title, Author) VALUES ( "%s", "%s", "%s")' % (
  28. # r# l$ D' M3 I) T: I            href,
  29. : g3 z- t0 @) X5 k5 R9 J            title.replace("\"", "\"\""),. R2 s0 Z8 J: Q\" g
  30.             em))
  31. ' O: i* u8 k& p/ s3 b1 ?( s        number += 1
  32. ' u4 `+ S/ h. l. l7 A- V7 F% Z0 {        print(title, href, em)
  33. ) n5 w' @+ L+ U+ }! i4 ^3 y/ v3 L. N: M. T7 W
  34.     conn.commit()
  35. 1 B7 a- e/ t0 ]0 b; V  t    return number > 0
  36. * V! n8 i& m7 Z2 `! P7 x# ]9 W& d) l  q+ h& w

  37. ! k/ q# j( U3 [& \if __name__ == '__main__':: E\" k' j5 l: B
  38. 5 A7 q3 E  W3 Y. J9 q) G, e5 R* c
  39.     conn = sqlite3.connect("Python-xxx.db")
  40. , I+ [/ z6 W3 C. L' Y    c = conn.cursor()
  41. ) h\" n* ]: J9 T* g& H    c.execute('''CREATE TABLE IF NOT EXISTS Python (
  42. \" S& y/ |# r) a5 x0 g        Url VARCHAR,1 @  l' S& V  O- Z' Y2 O
  43.         Title VARCHAR,! e% m% P, Q$ Y) o1 u5 j) _
  44.         Author VARCHAR
  45. $ y1 Z7 p& J/ B' q+ Q+ i    )''')
  46. ; }* D# c. U7 N% P8 }- r4 x    conn.commit()' a, ^8 f% L/ ]5 g

  47. ( u3 G/ v# P3 T3 a% t    host = "https://xxx"
  48. : V( I8 |9 U0 t2 g4 Z0 ?7 P0 ]    url = host + "/xxx". D\" R0 l& P0 f9 R& V1 F\" p
  49.     req = requests.get(url)1 O2 L. ?' u6 o+ n) [
  50.     req.encoding = 'utf-8'
  51. \" G  s6 f1 U; i3 I    # print(req.text)
  52.   U: Q5 \  t7 _8 S
  53. 6 C\" e+ w/ }0 G' n  d    html = etree.HTML(req.text)
  54. + G9 ^# K6 d! b\" p1 y  e5 l4 X- t    clearfixs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/text()')1 @1 j\" y2 Z$ e  M
  55.     hrefs = html.xpath('//*[@class="nav clearfix"]//a[starts-with(@href, "/cate/")]/@href')
  56. ! [) n, v' a. B/ @/ _& P# f    # print(clearfix, href)8 W: H6 A* ?+ Y  M

  57. , S: o, @8 C  X# _$ O# Z  a5 p    for clearfix, href in zip(clearfixs, hrefs):+ ?& l8 x, c$ {7 ^# T! s% J8 Z/ ~
  58.         print(clearfix, host + href)3 m; u9 U( v7 y& @

  59.   @: S- H# w& k! Z' R, K        page = 1$ }9 `* G+ M8 g, n* K) Q
  60.         while True:7 S( K; v+ J6 H+ t+ b
  61.             url = host + href + "/list_%s.html" % page
  62. # q% K- g9 p0 I4 _8 I* ?0 d5 K            req = requests.get(url)# @+ y* a6 a+ K0 V6 O3 S
  63.             req.encoding = 'utf-8'
  64. 2 j/ E* V\" v* l: ?) j9 x
  65.   H7 T3 o3 B; j6 R$ ^% w            if (not write_sql(c, req.text)):
  66. $ d$ |3 s3 O  @2 @                break
  67. % n% W( S; h9 k6 _0 f/ ^. n* X) m3 s* p& d( t  d. r. N0 q' ~
  68.             print("第%s页" % page): d; ~. g# |( ~$ m* T9 m2 W
  69.             page += 10 k8 X% G; Z- r5 Y: @8 Q0 v
  70. % @. w: E# ?$ D# B: e/ D
  71.     conn.close()% x$ [) \) P0 I$ {7 x# w, k

8 O* S4 z& q; j. Fxpath用着就是舒服~
2 j7 B1 }' k) K2 e9 _0 m" s, H3 u! H7 p- a
转发自派生社区
Python交流群:1047602540
8 `- I0 D% m' z) C+ G

# {" d* \) d* Q( ?% f& Q9 E  E- U+ A. v2 p
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-6-3 01:49 , Processed in 0.294057 second(s), 50 queries .

回顶部