请问这种网页是不是 js 加密的?应该如何获取数据?
学了几天 python,实战败了,这种动态的 requests 不到,各种错误。
最后试了 selenium,可以拿到数据,也可以分析,但是太慢了,花费时间和人力没区别。
作为一枚小白,怎样才能拿到这种实施响应的数据?我觉得这个不是 ajax 请求到的 json 吧?也不是普通的 js 脚本。
这里是不是还有加密信息?我想得到对赛往绩的数据,应该从哪个地方入手?
这种页面数据,按网上的方法,搜索不到相关的 js 文件,望大佬不吝赐教。!!!
学了几天 python,实战败了,这种动态的 requests 不到,各种错误。
最后试了 selenium,可以拿到数据,也可以分析,但是太慢了,花费时间和人力没区别。
作为一枚小白,怎样才能拿到这种实施响应的数据?我觉得这个不是 ajax 请求到的 json 吧?也不是普通的 js 脚本。
这里是不是还有加密信息?我想得到对赛往绩的数据,应该从哪个地方入手?
这种页面数据,按网上的方法,搜索不到相关的 js 文件,望大佬不吝赐教。!!!
那就快来回答我的问题吧! 🙂
第一个好像不是,只是赔率信息,第二个什么也看不到。
@v2sir 不耻下问,自学好难,而且没几天,是想好好学,可没有正八经的教程,视频教程看看就缺东西了,正经书里也不讲这些。前面一直学 python 基础语法了,然后发现,爬虫跟那个关系根本不大。真是醉了。
@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)
我抓下来了,对赛往绩和近期战绩都是空的。直接拿,拿不到的
谢谢大家里,数据是不直接显示的,刚刚我找到了。
v_data 是对赛 h_data 是主队近期战绩 等等等 , 接下来只要解析了。谢谢大家! 万分感谢!!!
万万分感谢。还是马虎了。粗心真不适合研究这东西,还是比较适合搬砖。
@v2sir 开始没生气啊,看你回复就上火了,每帖带着一股酸味,你自己看看吧,懒得搭理你。
我再去埋汰钻研几小时。早来问的话就不需要花 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(([sS]*?))’
numbers = re.findall(pattern,page,re.S)
for vlink in numbers:
#拼接处完整 URL
vlink = ‘http://zq.win007.com/analysis/’ + vlink + ‘cn.htm’
analysis()
print(‘采集完成!’)
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%’]
“`
向别人问问题应该用 “不吝赐教”
@blodside 好的。
@codists 谢谢雄对,在研究筛选数据。
@qazwsxkevin 就是爱好,喜欢看足球篮球,有时候也玩,那种数据类卖的很贵吧。也没盈利目的。
@gimp 那就不耻上问吧,呵呵
问问题,而已。 你帮我, 我帮他。。
愿意怼人玩去微博不好么,没别的,就是看不惯有些人
谢谢,随后研究下吧,看起来有点深奥。
众生百相~ 😀
用了一个星期从什么也不会到 requests 找不到数据,selenium (死慢),再到昨天来问问题,终于拨云见日。
隆重感谢
@matrix67
@gongym
@darer
@sairoa
简单的爬虫看来以后我能照着这个框架慢慢举一反三了。感谢大家! 万分感谢,这几天天天就睡五个小时没白熬~欣喜至极!