为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Python Crawler 抓取第二行文本

如何使用 Python Crawler 抓取第二行文本

千万里不及你 2021-12-17 15:40:50
我正在尝试从该网站的第二行中抓取 url:https://www.cwb.gov.tw/V7/js/HDRadar_1000_n_val.js。我使用 python 来爬行,但不确定是否应该使用 beautifulsoup 或正则表达式。我使用python BS4来爬行。但我不知道如何仅使用 url 捕获第二行。在我的尝试中,它捕获了所有网站。import requestsimport refrom bs4 import BeautifulSoupres = requests.get('https://www.cwb.gov.tw/V7/js/HDRadar_1000_n_val.js')soup = BeautifulSoup(res.text,'html.parser')print(soup)预期的:/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271140.png实际的:var HDRadar_1000_n_val=new Array( newArray/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271140.png("2019/03/27 11:40","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271140.png"), new Array("2019/03/27 11:30","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271130.png"), new Array("2019/03/27 11:20","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271120.png"), new Array("2019/03/27 11:10","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271110.png"), new Array("2019/03/27 11:00","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271100.png"), new Array("2019/03/27 10:50","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271050.png"), new Array("2019/03/27 10:40","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271040.png"), new Array("2019/03/27 10:30","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271030.png"), new Array("2019/03/27 10:20","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271020.png"), new Array("2019/03/27 10:10","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271010.png"), new Array("2019/03/27 10:00","/V7/observe/radar/Data/HD_Radar/CV1_1000_201903271000.png"), new Array("2019/03/27 ...
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

您无法使用 解析文本bs4。因此,请使用split. 然后遍历每一行并拆分,分隔符以获取url.


lines = res.text.strip(');\n').split('),\n')

for line in lines:

    print(line.split(',')[-1].strip('"'))


查看完整回答
反对 回复 2021-12-17
?
RISEBY

TA贡献1856条经验 获得超5个赞

这是如何做到的:


import requests

import re


res = requests.get('https://www.cwb.gov.tw/V7/js/HDRadar_1000_n_val.js')


pat = re.compile("(/V7/.*?.png)")

p = 0

while True:

    m = pat.search(res.text, p)

    if not m:

        break

    print m.group(1)

    p = m.end()

这应该是非常有效的。原始数据没有额外的副本或拆分,编译后的正则表达式是一种非常快速的数据搜索方式。


任何获得正确结果并在一秒钟内完成的解决方案都应该没问题。您可能需要一个更大的列表才能发挥作用。


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号