鱼C论坛

 找回密码
 立即注册
查看: 2035|回复: 13

[已解决]Python正则表达式疑问

[复制链接]
发表于 2019-2-3 20:51:30 | 显示全部楼层 |阅读模式
4鱼币
  我想爬起网站中一个股票代码,但是一直爬取不成功,代码如下,不知道哪里错了,我要实现的功能是,爬取股票代码和名称我的程序如下
from bs4 import BeautifulSoup
import requests
import re
html = "http://data.eastmoney.com/xg/xg/default.html"
res = requests.get(html)
soup = BeautifulSoup(res.content,'lxml')
print(res)
s =  r">(\d{6})</a>"
m = re.findall(s,str(soup))
print(m)
for i in m:
print(i)


   
数据已于 20:50 保存30 秒后保存 保存数据 | 恢复数据    字数检查 | 清除内容    加大编辑框 | 缩小编辑框
附加选项阅读权限抢楼主题主题标签
本版积分规则发布悬赏  保存草稿
         
关闭
上传图片
相册图片
网络
最佳答案
2019-2-3 20:51:31
此网页采用ajax加载数据,你从控制台看到数据是加载完毕的数据。如果不信可以查看网页源码,你就明白了。你可以使用控制台或fiddle抓包,找到真实的数据地址。
S79E2(%}J9{2ZTZWD7OG8AJ.png

最佳答案

查看完整内容

此网页采用ajax加载数据,你从控制台看到数据是加载完毕的数据。如果不信可以查看网页源码,你就明白了。你可以使用控制台或fiddle抓包,找到真实的数据地址。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-3 20:51:31 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
此网页采用ajax加载数据,你从控制台看到数据是加载完毕的数据。如果不信可以查看网页源码,你就明白了。你可以使用控制台或fiddle抓包,找到真实的数据地址。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-4 00:04:31 | 显示全部楼层
首先的问题是BS4不是这么用的,你这样re,BS4根本没用上
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-7 21:05:12 | 显示全部楼层
xy123151 发表于 2019-2-4 00:04
首先的问题是BS4不是这么用的,你这样re,BS4根本没用上

请指教,我哪里写错了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-7 22:31:13 | 显示全部楼层
475123763 发表于 2019-2-7 21:05
请指教,我哪里写错了

直接去看小甲鱼python极客系列的豆瓣电影top250,理解bs4的作用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-8 15:17:04 | 显示全部楼层
此网址http://data.eastmoney.com/xg/xg/default.html 没有符合r">(\d{6})</a>" 的连续6位数字。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-9 22:47:15 | 显示全部楼层
kaohsing 发表于 2019-2-8 15:17
此网址http://data.eastmoney.com/xg/xg/default.html 没有符合r">(\d{6})" 的连续6位数字。

可是按f12中找还是显示出是6个数字,是不是我哪里错了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-10 13:39:17 | 显示全部楼层
你所需要的数据在网页源代码的571行。  
你肉眼看到的页面内容是通过js加载571行的json数据产生的。  
这个网站无法直接使用bs4进行解析的。  

评分

参与人数 1鱼币 +1 收起 理由
475123763 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-11 22:08:50 | 显示全部楼层
wongyusing 发表于 2019-2-10 13:39
你所需要的数据在网页源代码的571行。  
你肉眼看到的页面内容是通过js加载571行的json数据产生的。  
这 ...

我有什么办法提取里面要的json数据吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-13 00:27:52 | 显示全部楼层
475123763 发表于 2019-2-11 22:08
我有什么办法提取里面要的json数据吗

不知道
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-13 15:18:41 | 显示全部楼层
475123763 发表于 2019-2-11 22:08
我有什么办法提取里面要的json数据吗

这样试试:
  1. import requests
  2. import time
  3. import json
  4. base_url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=XGSG_LB&token=70f12f2f4f091e459a279469fe49eca5&st=purchasedate,securitycode&sr=-1&p=1&ps=500&js=var%20kaohsing={pages:(tp),data:(x)}&rt=51667804'
  5. headers = { 'User-Agent': 'Mozilla/5.0 '}
  6. def parse_js(expr):
  7.     obj = eval(expr, type('Dummy', (dict,), dict(__getitem__=lambda s, n: n))())
  8.     return obj
  9. def get_htm():
  10.     try:
  11.         r = requests.get(url=base_url, headers=headers)
  12.         time.sleep(1)
  13.         r.raise_for_status()
  14.         r.encoding = r.apparent_encoding
  15.         data = r.text.split('kaohsing=')[1]
  16.         return data
  17.     except:
  18.         print('Error')
  19. def main():
  20.     str =get_htm()
  21.     jsons = parse_js(str)
  22.     json =jsons['data']
  23.     fields ='股票代码 股票简称  申购代码 发行总数     网上发行     顶格申购需配市值  申购上限      发行价格'
  24.     print(fields)
  25.     for i in range(len(json)):
  26.         d = json[i]

  27.         p1 = d['securitycode']
  28.         p2 = d['securityshortname']
  29.         p3 = d['subcode']
  30.         p4 = d['fxzl']
  31.         p5 = d['wsfxsl']
  32.         p6 = d['applyont']
  33.         p7 = d['applyontMoney']
  34.         p8 = d['jg1']
  35.         p9 = d['jg2']
  36.         p10 = d['jg3']
  37.         print("{0:6}\t {1:^4}\t{2:<5}\t{3:<11}\t{4:12}\t{5:^12}\t{6:<12}\t{7:<5}\t{8:<5}\t{9:<5}".format(p1, p2, p3, p4, p5, p6, p7, p8,p9,p10))

  38. if __name__ == '__main__':
  39.     main()
复制代码


  1. 股票代码 股票简称  申购代码 发行总数     网上发行     顶格申购需配市值  申购上限      发行价格
  2. 603681         永冠新材        732681        41647901.0           16659000.0          16000.0           160000.0            10.0         7.5          10.0
  3. 002958         青农商行        002958        555555556.0         166666500.0          166500.0          1665000.0           -            2.48         8.47
  4. 600928         西安银行        730928        444444445.0         133333000.0          133000.0          1330000.0           4.68         2.95         10.46
  5. 300758         七彩化学        300758        26680000.0           10672000.0          10500.0           105000.0            22.09        16.43        22.08
  6. 002949         华阳国际        002949        49030000.0           19612000.0          19500.0           195000.0            10.51        13.76        10.5
  7. 603956         威派格         732956        42596100.0           38337000.0          12000.0           120000.0            5.7          8.41         5.7  
  8. 300761         立华股份        300761        41280000.0           37152000.0          12000.0           120000.0            29.35        48.48        42.03
  9. 601865         福莱特         780865        150000000.0         135000000.0          45000.0           450000.0            2.0          3.23         4.8  
  10. 002947         恒铭达         002947        30378003.0           27340500.0          12000.0           120000.0            18.72        20.72        18.71
  11. 300755         华致酒行        300755        57888667.0           52100000.0          23000.0           230000.0            16.79        14.18        16.79
  12. 603351         威尔药业        732351        16666700.0           16666000.0          16000.0           160000.0            35.5         -            35.49
  13. 002946         新乳业         002946        85371067.0           76834000.0          25500.0           255000.0            5.45         7.46         5.45
  14. 300759         康龙化成        300759        65630000.0           59067000.0          19500.0           195000.0            7.66         -            7.66
  15. 601615         明阳智能        780615        275900000.0         248310000.0          82000.0           820000.0            4.75         5.35         4.75
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-28 23:42:36 | 显示全部楼层

哈哈,一直没精力上来继续学习,太感谢了。不过这句话是 data = r.text.split('kaohsing=')[1】中为什么用split('kaohsing=')[1】来切分数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-1 22:33:40 From FishC Mobile | 显示全部楼层
仔细看看返回的html,所有数据都赋值给了变量。var kaohsing={......}这种形式,用split 切割后就是个字典。大体这样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-10 19:46:50 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-2 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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