鱼C论坛

 找回密码
 立即注册
查看: 1921|回复: 3

[已解决]爬虫问题

[复制链接]
发表于 2021-11-14 18:04:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wzdyjn 于 2021-11-14 18:51 编辑

import requests


def main():
    url = 'https://bscscan.com/token/0xD44FD09d74cd13838F137B590497595d6b3FEeA4#balances'
    headers = {'user-agent': 'firefox'}
    r = requests.get(url, headers=headers)
    print(r.text)


if __name__ == '__main__':
    main()


微信图片_20211114183434.png

我想获取 如图所示的数据 获取不到    求帮助 谢谢

最佳答案
2021-11-14 19:17:43
本帖最后由 suchocolate 于 2021-11-14 19:27 编辑
wzdyjn 发表于 2021-11-14 18:37
我想获取的是这个数据  获取不到



屏幕截图 2021-11-14 192104.jpg
从浏览器f12分析,真实的数据在另外的页面,这个页面的的url比较长,在页面的html代码里搜的了以下,这个url里只有sid和p是变动的,其他不变,p是页码,所以只要我们找到sid就能合成url。
我在首页的html代码里搜了sid是js定义的,用etree不方便获取,改用re获取。
合成数据页url后,开始根据需要获取想要的页数,每页的数据存在了tr里,循环所有tr获取其中的值。

  1. import requests
  2. import re
  3. from lxml import etree


  4. def main():

  5.     url = 'https://bscscan.com/token/0xD44FD09d74cd13838F137B590497595d6b3FEeA4#balances'  # 主页面
  6.     headers = {'user-agent': 'firefox'}
  7.     r = requests.get(url, headers=headers)
  8.     sid = re.findall(r'var sid = \'(.*?)\'', r.text)[0]  # 从主页面搜索sid,用于合成数据页的url
  9.     result = []
  10.     for i in range(1, 3):  # 这里只爬取2页,想爬多一点的页,自己改range即可。
  11.         url = f'https://bscscan.com/token/generic-tokenholders2?' \
  12.               f'm=normal&a=0xD44FD09d74cd13838F137B590497595d6b3FEeA4&s=5000000000000000000000000&' \
  13.               f'sid={sid}&p={i}'  # 构建数据页url,i是第几页
  14.         r = requests.get(url, headers=headers)
  15.         html = etree.HTML(r.text)
  16.         trs = html.xpath('//tbody/tr')  # 使用xpath过滤出表格的每一行,逐行获取
  17.         for tr in trs:
  18.             rank = tr.xpath('./td[1]/text()')[0]
  19.             ads = tr.xpath('./td[2]/span/a/text()')[0]
  20.             qut = tr.xpath('./td[3]/text()')[0]
  21.             result.append([rank, ads, qut])  # 存到列表中
  22.     print(result)  # 打印结果


  23. if __name__ == '__main__':
  24.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-14 18:20:48 | 显示全部楼层
本帖最后由 suchocolate 于 2021-11-14 18:31 编辑

你的代码发全,我用下面的代码能取到内容:
  1. import requests


  2. def main():
  3.     url = 'https://bscscan.com/token/0xD44FD09d74cd13838F137B590497595d6b3FEeA4#balances'
  4.     headers = {'user-agent': 'firefox'}
  5.     r = requests.get(url, headers=headers)
  6.     print(r.text)


  7. if __name__ == '__main__':
  8.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-14 18:37:37 | 显示全部楼层
suchocolate 发表于 2021-11-14 18:20
你的代码发全,我用下面的代码能取到内容:


微信图片_20211114183434.png

我想获取的是这个数据  获取不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 19:17:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-11-14 19:27 编辑
wzdyjn 发表于 2021-11-14 18:37
我想获取的是这个数据  获取不到



屏幕截图 2021-11-14 192104.jpg
从浏览器f12分析,真实的数据在另外的页面,这个页面的的url比较长,在页面的html代码里搜的了以下,这个url里只有sid和p是变动的,其他不变,p是页码,所以只要我们找到sid就能合成url。
我在首页的html代码里搜了sid是js定义的,用etree不方便获取,改用re获取。
合成数据页url后,开始根据需要获取想要的页数,每页的数据存在了tr里,循环所有tr获取其中的值。

  1. import requests
  2. import re
  3. from lxml import etree


  4. def main():

  5.     url = 'https://bscscan.com/token/0xD44FD09d74cd13838F137B590497595d6b3FEeA4#balances'  # 主页面
  6.     headers = {'user-agent': 'firefox'}
  7.     r = requests.get(url, headers=headers)
  8.     sid = re.findall(r'var sid = \'(.*?)\'', r.text)[0]  # 从主页面搜索sid,用于合成数据页的url
  9.     result = []
  10.     for i in range(1, 3):  # 这里只爬取2页,想爬多一点的页,自己改range即可。
  11.         url = f'https://bscscan.com/token/generic-tokenholders2?' \
  12.               f'm=normal&a=0xD44FD09d74cd13838F137B590497595d6b3FEeA4&s=5000000000000000000000000&' \
  13.               f'sid={sid}&p={i}'  # 构建数据页url,i是第几页
  14.         r = requests.get(url, headers=headers)
  15.         html = etree.HTML(r.text)
  16.         trs = html.xpath('//tbody/tr')  # 使用xpath过滤出表格的每一行,逐行获取
  17.         for tr in trs:
  18.             rank = tr.xpath('./td[1]/text()')[0]
  19.             ads = tr.xpath('./td[2]/span/a/text()')[0]
  20.             qut = tr.xpath('./td[3]/text()')[0]
  21.             result.append([rank, ads, qut])  # 存到列表中
  22.     print(result)  # 打印结果


  23. if __name__ == '__main__':
  24.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 21:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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