鱼C论坛

 找回密码
 立即注册
查看: 2567|回复: 15

[已解决]做爬虫的一些问题

[复制链接]
发表于 2021-5-15 09:09:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
url如下:
https://ned.ipac.caltech.edu/byname?objname=PKS%200002-478&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1

这个网页的数据画红圈的数据要怎么爬下来?
最佳答案
2021-5-17 21:19:01
snowJR 发表于 2021-5-17 07:30
原来的搜索的url是这一个

https://ned.ipac.caltech.edu/
  1. import requests
  2. import re
  3. import time
  4. from urllib import parse


  5. def parser(datas):
  6.     for data in datas:
  7.         print(data)

  8. def get_data(objid, keyword):
  9.     url = 'https://ned.ipac.caltech.edu/ffs/sticky/CmdSrv'
  10.     ff = str(int(time.time() * 1000))
  11.     data = {
  12.         'request': '{"startIdx":0,"pageSize":1000,"ffSessionId":"FF-Session-'+ff+'","filters":"","source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname='+keyword+'&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid='+objid+'","alt_source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname='+keyword+'&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid='+objid+'","META_INFO":{"title":"qlphot","tbl_id":"tbl_id-c50b9-6","col.Refcode.PrefWidth":"20","col.Spectral Region.PrefWidth":"14","col.Band.PrefWidth":"17","col.Apparent Mag or Flux.PrefWidth":"16","col.Reference code.PrefWidth":"12","selectInfo":"false--0"},"tbl_id":"tbl_id-c50b9-6","id":"IpacTableFromSource"}',
  13.         'cmd': 'tableSearch'
  14.     }
  15.     res = requests.post(url, headers=headers, data=data)
  16.     return res.json()['tableData']['data']

  17. def get_objid(keyword):
  18.     url = f'https://ned.ipac.caltech.edu/byname?objname={keyword}&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1'
  19.     res = requests.get(url, headers=headers)
  20.     objid = re.findall('objid=(.*?)"', res.text)[0]
  21.     datas = get_data(objid, keyword)
  22.     parser(datas)

  23. if __name__ == '__main__':
  24.     word = input('输入关键词:')
  25.     key_word = parse.quote(word)
  26.     headers = {
  27.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
  28.     }
  29.     get_objid(key_word)
复制代码
微信图片_20210515090815.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-15 09:10:49 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-15 10:18:07 | 显示全部楼层
https://ned.ipac.caltech.edu/ffs/sticky/CmdSrv
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 10:18:51 | 显示全部楼层
F12找我上面发的那个链接
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 10:29:26 | 显示全部楼层
  1. from selenium import webdriver
  2. import time

  3. driver = webdriver.Chrome()
  4. driver.get('https://ned.ipac.caltech.edu/byname?objname=PKS%200002-478&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1')
  5. time.sleep(5)

  6. driver.find_element_by_id('ui-id-10').click()  #切换到Photometry & SED (47)选项卡
  7. time.sleep(5)

  8. tab1 = driver.find_elements_by_xpath('//div[@class="fixedDataTableLayout_rowsContainer"]')[0]
  9. #因为该选项卡下有两个表格,所以用[0]指定为第一个表格
  10. cells = tab1.find_elements_by_class_name('public_fixedDataTableCell_cellContent')
  11. #表格单元class均为public_fixedDataTableCell_cellContent
  12. txt = [i.text for i in cells]
  13. print(txt)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-15 17:38:30 | 显示全部楼层
南归 发表于 2021-5-15 10:18
F12找我上面发的那个链接

不是很明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 18:56:30 | 显示全部楼层
自己多分析F12咋用吧....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-15 19:08:21 | 显示全部楼层
南归 发表于 2021-5-15 18:56
自己多分析F12咋用吧....

这种属于ajax编码的网页吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 19:17:19 | 显示全部楼层

                               
登录/注册后可看大图


先打开网页,等待加载完毕后,先清空抓包记录,再点击Photometry & SED (47),搜索Gamma-Ray,得到如图所示的界面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 21:06:14 | 显示全部楼层
楼上兄弟已经给你找到数据接口了,你直接携带参数请求数据接口就能拿到数据。
  1. import requests

  2. url = 'https://ned.ipac.caltech.edu/ffs/sticky/CmdSrv'
  3. headers = {
  4.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
  5. }
  6. data = {
  7.     'request': '{"startIdx":0,"pageSize":1000,"ffSessionId":"FF-Session-1621083370564","filters":"","source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname=PKS+0002-478&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid=76355","alt_source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname=PKS+0002-478&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid=76355","META_INFO":{"title":"qlphot","tbl_id":"tbl_id-c50b9-6","col.Refcode.PrefWidth":"20","col.Spectral Region.PrefWidth":"14","col.Band.PrefWidth":"17","col.Apparent Mag or Flux.PrefWidth":"16","col.Reference code.PrefWidth":"12","selectInfo":"false--0"},"tbl_id":"tbl_id-c50b9-6","id":"IpacTableFromSource"}',
  8.     'cmd': 'tableSearch'
  9. }
  10. res = requests.post(url, headers=headers, data=data)
  11. print(res.json())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-16 10:12:46 | 显示全部楼层
YunGuo 发表于 2021-5-15 21:06
楼上兄弟已经给你找到数据接口了,你直接携带参数请求数据接口就能拿到数据。

当我改变搜索的目标时,data的信息要自动获取?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 19:19:44 | 显示全部楼层
snowJR 发表于 2021-5-16 10:12
当我改变搜索的目标时,data的信息要自动获取?

改一下data查询参数就行,你举个例看看,你要搜索的其他内容,我分析分析查询参数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-17 07:29:51 | 显示全部楼层
YunGuo 发表于 2021-5-16 19:19
改一下data查询参数就行,你举个例看看,你要搜索的其他内容,我分析分析查询参数。

比如说我现在要查询 0106+013  这一个的信息
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-17 07:30:43 | 显示全部楼层
YunGuo 发表于 2021-5-16 19:19
改一下data查询参数就行,你举个例看看,你要搜索的其他内容,我分析分析查询参数。

原来的搜索的url是这一个

https://ned.ipac.caltech.edu/
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-17 21:19:01 | 显示全部楼层    本楼为最佳答案   
snowJR 发表于 2021-5-17 07:30
原来的搜索的url是这一个

https://ned.ipac.caltech.edu/
  1. import requests
  2. import re
  3. import time
  4. from urllib import parse


  5. def parser(datas):
  6.     for data in datas:
  7.         print(data)

  8. def get_data(objid, keyword):
  9.     url = 'https://ned.ipac.caltech.edu/ffs/sticky/CmdSrv'
  10.     ff = str(int(time.time() * 1000))
  11.     data = {
  12.         'request': '{"startIdx":0,"pageSize":1000,"ffSessionId":"FF-Session-'+ff+'","filters":"","source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname='+keyword+'&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid='+objid+'","alt_source":"http://ned.ipac.caltech.edu/cgi-bin/objsearch?extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=xml_qlphot&zv_breaker=30000.0&list_limit=5&img_stamp=YES&objname='+keyword+'&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1&objid='+objid+'","META_INFO":{"title":"qlphot","tbl_id":"tbl_id-c50b9-6","col.Refcode.PrefWidth":"20","col.Spectral Region.PrefWidth":"14","col.Band.PrefWidth":"17","col.Apparent Mag or Flux.PrefWidth":"16","col.Reference code.PrefWidth":"12","selectInfo":"false--0"},"tbl_id":"tbl_id-c50b9-6","id":"IpacTableFromSource"}',
  13.         'cmd': 'tableSearch'
  14.     }
  15.     res = requests.post(url, headers=headers, data=data)
  16.     return res.json()['tableData']['data']

  17. def get_objid(keyword):
  18.     url = f'https://ned.ipac.caltech.edu/byname?objname={keyword}&hconst=67.8&omegam=0.308&omegav=0.692&wmap=4&corr_z=1'
  19.     res = requests.get(url, headers=headers)
  20.     objid = re.findall('objid=(.*?)"', res.text)[0]
  21.     datas = get_data(objid, keyword)
  22.     parser(datas)

  23. if __name__ == '__main__':
  24.     word = input('输入关键词:')
  25.     key_word = parse.quote(word)
  26.     headers = {
  27.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
  28.     }
  29.     get_objid(key_word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-18 08:34:56 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 17:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表