1
maloneleo88 OP 想得到心理上的满足与快感吗?
想展现男人的雄风吗? 想站在众山之巅俯视苍生吗? 那就快来回答我的问题吧! :) |
2
matrix67 2021-02-15 12:50:44 +08:00
var sOdds=[['未开场',0,0,0.65,0,1.20,1.11,0.25,0.72,0.89,0.25,0.93,0.94,0.5,0.88,0.70,0.75,1.11,1.06,1,0.74,0.97,2.25,0.83,0.81,2.25,0.99,2.82,1.99,3.80,2.53,2.08,4.10,2.14,3.15,3.00,1.94,3.25,3.35,0,0,0,0,0,0,0],['45',0,0,1.17,0.25,0.71,0.47,0,1.63,0.98,0.5,0.88,0.96,0.25,0.90,1.08,1,0.76,5.26,0.5,0.03,0.81,2.25,0.99,1.12,1.25,0.73,2.66,2.03,3.95,14.00,1.01,17.00,2.00,3.15,3.30,2.35,2.25,4.00,1,0,0,0,0,0,0],['中场',0,0,,,,,,,0.96,0.25,0.90,1.00,0.25,0.86,,,,,,,1.12,1.25,0.73,0.86,1,0.98,,,,,,,2.35,2.25,4.00,2.42,2.13,4.20,2,0,0,0,0,0,0],['85',0,0,,,,,,,1.00,0.25,0.86,0.43,0,1.75,,,,,,,0.86,1,0.98,3.70,0.5,0.11,,,,,,,2.42,2.13,4.20,7.90,1.09,13.00,3,0,0,0,0,0,0]];maketable();
|
3
maloneleo88 OP @matrix67 这个是 Odds,Odds 是赔率,不是我要的信息。我想要对赛往纪,或者近期战绩里面的信息。 劳烦再看一下,这是 js 加密的吗?
|
4
gongym 2021-02-15 13:47:54 +08:00
数据都在页面里呢,下载下来 html,搜索 v_data,Vs_hOdds 就剋看到了
|
5
maloneleo88 OP @gongym 我的好哥哥,先不管数据在不在页面里。我现在是连 requests 页面都不可以啊。 只能总 selenium,毫无意义呀,慢的要死
|
6
darer 2021-02-15 14:52:55 +08:00
UA cookie refer 一般也就判定这几个吧
|
7
input2output 2021-02-15 14:57:26 +08:00
加一下
User-Agent Accept |
8
darer 2021-02-15 14:58:20 +08:00
https://sm.ms/image/PRSijLcgFdl95Nq
试了个 UA 就爬到了 |
9
v2sir 2021-02-15 14:58:34 +08:00 2
作为小白, 应该好好学习。如果连这么简单的页面都提取不了。应该回过头去重新学, 或者学会放弃。
|
10
maloneleo88 OP @darer
XHR 里面有两个包 http://zq.win007.com/analysis/odds/1964531.htm?1613372332000 http://zq.win007.com/xml/position/footballanaly.txt?r=0071613372333000 第一个好像不是,只是赔率信息,第二个什么也看不到。 |
11
maloneleo88 OP @input2output 谢谢,马上去试,真的不懂
@v2sir 不耻下问,自学好难,而且没几天,是想好好学,可没有正八经的教程,视频教程看看就缺东西了,正经书里也不讲这些。前面一直学 python 基础语法了,然后发现,爬虫跟那个关系根本不大。真是醉了。 @darer 谢谢哈,我还没太懂,这就去试试,万分感谢! |
12
maloneleo88 OP @darer
import requests r = requests.get UA = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68' res = r('http://zq.win007.com/analysis/1964531cn.htm',headers={"User-Agent":UA}) res.encoding = 'utf-8' print(res.text) 我抓下来了,对赛往绩和近期战绩都是空的。直接拿,拿不到的 |
13
maloneleo88 OP @v2sir 看了你以往评论,一句有用的都没有,是不是现实生活不如意,蹲在网线上泄愤?继续吧~ two be number 1
|
14
sairoa 2021-02-15 15:42:43 +08:00
把数据刷新的请求复制成 curl 格式,然后用 https://curl.trillworks.com/转成 python 的代码,最后就按照自己需求改请求数据喽。看了一下这网站,不让右键,不过数据还是能抓下来的。
|
15
v2sir 2021-02-15 15:46:44 +08:00 5
@maloneleo88 笑了,是谁没得到答案开始泄愤的? 我叫你回头看看补充基本知识就成泄愤了? 你是婴儿还是残疾?一点小问题就像别人欠你似的? 你以为你谁啊? 我非要告诉你答案?
|
16
tan9p 2021-02-15 15:48:40 +08:00 via Android
哈哈,仿佛看到了多年前的自己,祝好运
|
17
gongym 2021-02-15 15:49:24 +08:00
@maloneleo88 下载下来 html,搜索 v_data,Vs_hOdds 就看到数据了,具体逻辑是在 func.js 里面的 init 和 init_vs 方法,如果 div 的 id 是 v,就获取 v_data 赋值给 data,渲染 table (除了数据)。然后在 init_vs 方法中执行 showOdds_h 方法和 showOdds_s 方法,加载数据。看了下方法就是获取 Vs_hOdds 和 Vs_eOdds 加载数据。你要的数据。直接从 html 中搜就有了。就在 script 标签中。是加载页面的时候就有的。但是如果不执行 js 方法这个数据是不会渲染到页面上的。
|
18
maloneleo88 OP |
19
musi 2021-02-15 16:04:38 +08:00
首先,requests 是用来发请求的,所以不知道你说的“动态”是个啥意思。
其次,selenium 可以拿到,这里要分析两个方面,是请求的不对还是解析数据不对 再者,看评论,你现在已经请求成功了,但还是没拿到数据,这就是数据解析的问题了,看了一下是写在 js 里,可以尝试用正则或者其他方法提取出来转成 json 最后,有时候实战不是你学了这单个方面的知识就可以爬的,就拿爬虫来讲,有些网站做了反扒就不是你单学个基础 python 就能爬得出来的,刚学习还是找个简单点的,增强自己的信心 |
20
maloneleo88 OP @gongym 大哥解释的很透彻,看代码头疼直接保存成 html 了,一看啥也没有,就想是不是又用 js 之类的。后来挨个看代码找到了。感觉看到曙光了,祝各位热心肠新年快乐!
|
21
maloneleo88 OP @musi 这些概念都是很模糊。十几年前也做过网页玩,不可同日而语。难,岁数大了脑袋也不好用了。从头学是不可能从头学了,学会了就该 40 了。主要目标是干点什么,马上能用的起来就行。有些实在爬不了的只能用 selenium 了,毕竟简单,就是太慢。
我再去埋汰钻研几小时。早来问的话就不需要花 2 天学 selenium 了。 贴段昨天写的,很乱,有点像狗啃的。 import requests import re from selenium import webdriver from lxml import etree from time import sleep #无头浏览模式 from selenium.webdriver.firefox.options import Options options = Options() options.add_argument('--headless') #定义解析详情页函数 def analysis(): bro = webdriver.Firefox(options=options) #定义要访问的目标 analysislink = vlink #打开浏览器访问 bro.get(analysislink) #获取源码数据 page_text = bro.page_source #解析数据。实例化 etree tree = etree.HTML(page_text) #获取主队名称,链接,本次得分 homeName = tree.xpath('//div[@class="analyhead"]/div[@class="home"]/a/text()')[0] homeLink = tree.xpath('//div[@class="analyhead"]/div[@class="home"]/a/@href')[0] homeScore = tree.xpath('//div[@class="end"]/div[1]/text()')[0] #获取客队名称,链接,本次得分 guestName = tree.xpath('//div[@class="analyhead"]/div[@class="guest"]/a/text()')[0] guestLink = tree.xpath('//div[@class="analyhead"]/div[@class="guest"]/a/@href')[0] guestScore = tree.xpath('//div[@class="end"]/div[3]/text()')[0] # print(homeName,guestName,homeLink,guestLink,homeScore,guestScore) #获取上一次比赛主队的 ID 链接,客队的 ID 链接,双方比分,截取上次主队得分,截取上次客队得分。 try: last_homeLink = tree.xpath('//div[@id="v"]//tr[3]/td[3]/a/@href')[0] last_guestLink = tree.xpath('//div[@id="v"]//tr[3]/td[6]/a/@href')[0] lastScore = tree.xpath('//div[@id="v"]//tr[3]/td[4]/a/font/text()')[0] last_homeScore = lastScore[0] last_guestScore = lastScore[-1] #a1 本次主队链接+本次主队得分。a2 本次客队链接+本次客队得分,b1 上次主队链接+得分,b2 上次客队链接+得分 a1 = homeLink + homeScore a2 = guestLink + guestScore b1 = last_homeLink + last_homeScore b2 = last_guestLink + last_guestScore #如果本次主队链接+得分等于上次主队链接+得分或者等于上次客队链接+得分 #然后看本次客队链接+得分是否等于上次主队链接+得分或客队链接+得分 #如果符合这两个条件,续写入 saiguo.html 相关信息(这里还没有给链接添加超链) if a1 == b1 or a1 ==b2: if a2 == b1 or a2 == b2: print(homeName + ' ' + lastScore + ' ' + guestName + '\n') print(analysislink + '\n') with open('./saiguo.html','a') as fp: fp.write(homeName + ' ' + lastScore + ' ' + guestName + '\n') fp.write(analysislink + '\n') sleep(2) bro.close() else: bro.quit() else: bro.quit() #如果没有找到上一次的对往战绩则睡眠 1 秒然后退出浏览器 except: bro.close() if __name__ == "__main__": #浏览器伪装 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68' } kw = input('输入赛程年月日采集数据:') #response 函数为第一次抓取的完赛列表 response = requests.get('http://bf.win007.com/football/Over_' + kw + '.htm',headers = headers) #列表编码为 gb2312,所以需要转一下为 GBK,负责无法正常显示 response.encoding = 'GBK' #转换的文字信息存入 page 变量 page = response.text #提取比赛分析数字,定义正则表达,第二行找到所有 pattern = r'analysis\(([\s\S]*?)\)' numbers = re.findall(pattern,page,re.S) for vlink in numbers: #拼接处完整 URL vlink = 'http://zq.win007.com/analysis/' + vlink + 'cn.htm' analysis() print('采集完成!') |
22
v2sir 2021-02-15 16:15:32 +08:00 6
@maloneleo88 你也知道懒得搭理人? 你 requests 开始连 UA 都不加, 你叫我怎么想? 我第一个反应就是你是不是在消遣人。
|
23
musi 2021-02-15 16:16:24 +08:00
@maloneleo88 selenium 如果你电脑内存大的话可以开多进程,也就是多个浏览器实例,我之前用 selenium hub 一次开了二十多个,稍微快了一点,重要的是这种方法可以安装浏览器插件对网页进行操作
|
25
codists 2021-02-15 18:39:21 +08:00
```python
from selenium import webdriver url = 'http://zq.win007.com/analysis/1964531cn.htm' browser = webdriver.Chrome() browser.get(url) try: tbody = browser.find_elements_by_css_selector('#table_v tr') for td in tbody[2:]: print(td.text.split(' ')) except: print('NoSuchElement') ``` 输出示例: ```python ['墨西乙', '20-09-14', '塞拉亚', '3-0(1-0)', '3-3', '亚特兰特 1', '1.03', '半球', '0.79', '1.95', '3.17', '3.70', '负', '输', '大'] ['墨西乙', '20-01-26', '塞拉亚', '1-0(1-0)', '4-5', '亚特兰特', '1.08', '平 /半', '0.76', '2.45', '2.68', '3.11', '负', '输', '小'] ['墨西乙', '19-10-25', '1 亚特兰特', '2-1(0-1)', '3-2', '塞拉亚 1', '1.06', '半球', '0.76', '2.05', '3.11', '3.45', '胜', '赢', '大'] ['墨西乙', '19-03-16', '亚特兰特', '1-2(1-1)', '3-1', '塞拉亚', '0.82', '半 /一', '1.02', '1.61', '3.60', '4.93', '负', '输', '大'] ['墨西乙', '18-10-21', '2 塞拉亚', '1-0(1-0)', '1-3', '亚特兰特 1', '1.03', '平手', '0.81', '2.67', '3.11', '2.45', '负', '输', '小'] ['墨西乙', '18-01-21', '塞拉亚', '2-1(2-1)', '2-4', '亚特兰特', '0.96', '平 /半', '0.86', '2.14', '3.13', '3.19', '负', '输', '大'] ['墨西乙', '17-08-05', '亚特兰特', '1-0(0-0)', '3-3', '塞拉亚', '1.12', '平 /半', '0.71', '2.36', '3.07', '2.82', '胜', '赢', '小'] ['墨西乙', '17-02-04', '亚特兰特', '1-2(1-2)', '6-2', '塞拉亚', '0.85', '半球', '0.97', '1.87', '3.29', '3.84', '负', '输', '大'] ['墨西乙', '16-11-27', '塞拉亚', '0-0(0-0)', '7-3', '亚特兰特', '0.82', '半球', '1.02', '1.84', '3.35', '3.83', '平', '赢', '小'] ['墨西乙', '16-11-24', '亚特兰特', '1-0(0-0)', '3-0', '塞拉亚', '0.94', '平 /半', '0.90', '2.11', '3.15', '3.15', '胜', '赢', '小'] ['近', '10', '场,', '胜出', '3', '场,平局', '1', '场,输', '6', '场,', '胜率:30%', '赢盘率:40%', '大球率:50%', '单率:90%'] ``` |
26
gimp 2021-02-15 19:31:52 +08:00 9
“不耻下问” 意思是指向地位、学问不如自己的人请教而不感到丢面子。
向别人问问题应该用 “不吝赐教” |
27
qazwsxkevin 2021-02-15 19:44:22 +08:00
学习是一回事,
如果真要拿这个做什么事情,体育数据方面还真不如直接买数据回来划算,如飞 jing,sopr*rader 之类,比起去爬这些网页要丰富 |
28
Lemeng 2021-02-15 22:02:49 +08:00
怎么评论区好像吵起来了?
|
29
www5070504 2021-02-15 22:05:02 +08:00 1
不耻下问 有意思嗷
|
30
learningman 2021-02-15 22:19:42 +08:00 1
@blodside 但我再菜逼的时候也不会像楼主这样生猛啊
这种骂你一句里面都是有有用的信息的,算指导的 |
31
xJogger 2021-02-15 22:26:50 +08:00
|
33
maloneleo88 OP @musi 嗯,好处就是用处广泛。但跟直接拿数据响应没法比啊,速度差太多了。
@blodside 好的。 @codists 谢谢雄对,在研究筛选数据。 @qazwsxkevin 就是爱好,喜欢看足球篮球,有时候也玩,那种数据类卖的很贵吧。也没盈利目的。 @gimp 那就不耻上问吧,呵呵 问问题,而已。 你帮我, 我帮他。。 愿意怼人玩去微博不好么,没别的,就是看不惯有些人 |
34
maloneleo88 OP |
35
maloneleo88 OP 不吝赐教,主楼就说了,不要咬文嚼字了
众生百相~ :D |
36
qazwsxkevin 2021-02-15 23:47:09 +08:00
@maloneleo88 不知道价格,只是知道国内有几家这样的网站是向这些相同的数据公司买的数据(貌似有版权)
|
37
maloneleo88 OP @qazwsxkevin 纯属个人喜好,飞鲸,纳米这些数据公司有卖接口,少说一年几万,太贵了
|
38
Cusmate 2021-02-16 19:10:11 +08:00 via Android
第一层楼主的回复竟有点别致
|
39
maloneleo88 OP |