python爬取的数据存在哪里,python爬取页面元素内内容

  python爬取的数据存在哪里,python爬取页面元素内内容

  大意:根据个人评价记录页(https://www.luogu.com.cn/record/list?User=…),得到每道题的评价数,然后进入数页得到代码中的换行符数进行累加。

  获取页面代码:

  Get htmltext (URL,cookie):try:response=requests . get(URL,headers=header,cookie=cookie)return response . text except:return 其中参数头初始化(dict类型):

  header={ user-agent : Mozilla/5.0 } cookie初始化需要查看浏览器的开发者工具:(以Edge为例,其他类似)

  1.按F12打开开发工具并找到“应用程序”

  2.在洛谷登录界面点击cookie。

  3.对于每个名称和值,以字典的形式存放在代码中:

  (代码中只放了一对,所有cookie都应该放入dict中)

  cookie={ log in _ referer : https://www.luogu.com.cn/}现在可以分析评测记录页面抓取的代码了(用户=自己的id号):

  URL=r https://www . luogu . com . cn/record/list?用户=.page=1# modify user=print(获取html文本(URL,cookie))。剧本标签下有一句话

  脚本窗口。_ injection=JSON . parse(DecoderiComponent( { " code ":200%.发现DecoderiComponent中的内容包含了我们需要的信息。经过咨询,我们可以使用python的execjs库执行DecoderiComponent函数对原始内容进行解码。(execjs库需要先安装在pip中)

  Pippyexecjs解码部分:

  CTX=execjs . compile( function decode(str){ return decodeURIComponent(str);}) DEF decode (STR):返回CTX。调用( DECODE ,STR)对刚刚爬网的字符串进行解码,格式如下:

  问题:{pid:P7074 , title :[CSP-j 2020]\ u65b 9 \ u683c \ u53d 6 \ u 6570 ,难度:3, fullScore:100, type:P}, contest:null, sourceCodeLength:894, submitTime:1627265394, language:3, user:{uid:xxx, name:xxx , slogan : , badge:null, isAdmin:false, isb

  编写给定评估页的代码,并计算评估页的行数:

  (评价页形似https://www.luogu.com.cn/record/……)

  getline of(URL):text=gethtml text(URL,cookie) returndecode (text)。Count (r \ n )然后写出计算给定页面代码行总数的代码(也需要改成自己的userId):

  def getLineOfPage(page):URL=r https://www . luogu . com . cn/record/list?user=xxxpage= str(page)#user=.text=getHTMLText(url,cookie)text=decode(text)# print(text)m=re . find all(r id :(。),,text) n=re.findall(rpid :(。),,text)ret=0 pointer=0 for pointer in range(len(n)):if n[pointer]in Vis:continue each URL=r https://www . luogu . com . cn/record/ m[pointer]Vis .append (n [pointer]) t=getlineof(每个URL) print (%s-%d行 % (n [pointer],t))ret=ret t ret正则表达式匹配后的id应该比pid多1,因为有最后一个扰码(可能是主题等信息)

  当前主题:{id: 1, header: {imagepath: null, color :所以循环的时候只要按照代码中n列表的长度就可以了。

  完整代码:(写的比较匆忙,代码还不完善。使用的时候需要把user=…的地方,所有评论里的最大页数和cookie改成你自己的)

  导入请求导入执行版本=[]CTX=执行版本。compile( function decode(str){ return decodeURIComponent(str);})cookie={}#修改cookieheader={ User-Agent : Mozilla/5.0 } def decode(str):返回CTX。call( decode ,str)def getHTMLText(url,cookie):try:response=requests。get(URL,headers=header,cookie=cookie)返回响应。text except:return def getline of(URL):text=gethtml text(URL,cookie) return decode(text).count(r \ n )def getline of page(page):URL=r https://www .洛古。com。cn/记录/列表?用户=.page= str(page)#改user text=getHTMLText(url,cookie)text=decode(text)# print(text)m=re。查找全部(r id :).),,text) n=re.findall(rpid :(.),,text)ret=0 pointer=0 for pointer in range(len(n)):if n[pointer]in vis:continue each URL=r https://www .洛古。com。cn/record/ m[pointer]visappend(n[pointer])t=getline of(每个URL)print( % s-% d Lines %(n[pointer],t))ret=ret t returl= max page=1 #修改最大页数,去评测记录页看一下页数now=1cnt=0 while now=maxpage:URL=https://www.luogu.com.cn/record/list?用户=.page= str(now)#修改CNT=CNT getline of page(now)now=now 1 print(总代码行数:)打印(计数)运行示例(仅爬了一页,这页反复提交了一道题不少次所以只有五条):

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: