某评论网站爬虫练习

news/2024/5/20 9:43:58/文章来源:https://blog.csdn.net/qq_44638724/article/details/121068014

准备工作

  • 需要用到的库
import requests  
from bs4 import BeautifulSoup  
import re  
from fontTools.ttLib import TTFont  

step1

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"} 
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
print("页面状态码:{0}".format(response.status_code))

通过requests的get方法来访问url, 并指定解码方式为"utf-8". 可以看到标题被存放在hldiv标签, 类型被存放在a标签中等.

soup = BeautifulSoup(response.text, "html.parser")
#print(soup)
div = soup.find_all("div", {"class": "movie-brief-container"})[0]
CN_title = div.h1.text
EN_title = div.div.text
MoveType = []for i in range(len(div.find_all("li")[0].find_all("a"))):move_type = div.find_all("li")[0].find_all("a")[i].textMoveType.append(move_type)land = div.find_all("li")[1].text
Land = land.replace("\n", "").lstrip().rstrip().replace(" ", "").split("/")

接下来我们用BeautifulSoup库来格式化response对象的内容, 使其更易读.

step2(难点)

接下来用户rating的内容, 与step1不同的是, 数字内容被加密了(我们看到的内容是.).
可以看到这个字体的class为"stonefont", 这是一种自定义字体, 起初是为了解决浏览器字体不适配的问题.

  • 参考解决办法
    首先右击页面, 查看源代码
    在这里插入图片描述
    实际上这种字体的编码通过一个woff文件来控制, 我们只需要ctrl + F后搜索stonefont
    在这里插入图片描述
    就可以找到这个文件, 那么我们就可以通过下载这个文件来查看被加密的数字是通过何种方式来编码的
fontUrl = "http://vfile.meituan.net/colorstone/0e34b53354e3b3af841216ade738e4312268.woff"
r = requests.get(fontUrl)
with open("D://Desktop//stonefont.woff", "wb") as code:code.write(r.content)

我们可以通过这个网站查看woff字体文件(Iconfot)

在这里插入图片描述
显然这是一种unicode编码方式, 我们再回到网页源代码上

html = response.content.decode("utf-8")
html

在这里插入图片描述
注意到html里的内容很乱, 这是因为我们没有通过beautifulsoup解决, 原因是beautifulsoup库会自动解析Unicode编码, 导致我们看不到加密数字的真实情况(尽管内容很乱, 我们依然可以通过ctrl + F: koubei来找到标签的位置).
可以看到包含了(rating)的标签内数字部分都现显示出了其Unicode编码. 也就是说每个Unicode代表了一个数字, 我们只需找到每个数字的具体Unicode就可以将其替换为真实的数字(实际上工作量并不太大, 因为数字只包括了0-9)
利用刚才提到的网站解析woff文件.
在这里插入图片描述
xe48e和xe84e分别指向了9和6, 这与页面上9.6的评分一致. 现在我们需要建立起Unicode与数字的对应关系

fontPath = "D://Desktop//0e34b53354e3b3af841216ade738e4312268.woff"
font = TTFont(fontPath)
fontNumber = [8, 4, 1, 2, 7, 9, 5, 6, 3, 0]

TTFont方法能够直接读取woff文件并给出其Unicode形式, 你也应该能够发现fontNumber列表里的内容正是和woff文件的数字相对应. 幸运的是python中的字典dict正好匹配了这种形式, 所以我们将这种对应关系建立为字典.

numDict = {}
for i in range(len(newList)):numDict[newList[i]] = fontNumber[i]

既然对应关系已经找到, 我们就可以去寻找这些Unicode所在的位置

html = response.content.decode("utf-8")
star = re.findall(r'<span class="index-left info-num ">\s+<span class="stonefont">(.*?)</span>\s+</span>', html)
starNumber = str()
for i in range(len(star[0].split("."))):if star[0].split(".")[i] in numDict:starNumber = starNumber + "." + str(numDict[star[0].split(".")[i]])#print(numDict[star[0].split(".")[i]], end=".") #这里的print方法是为了调试, 当代码运行正常时我们就可以将其注释.

注意: 这里我们使用了正则表达式的方式来匹配标签, 因为我们并没有通过BeautifulSoup方法去解析response对象, 那么r.find_all()方法就是不可用的, 因为这是针对soup对象的方法.
运行结果:
在这里插入图片描述
结果为9.6, 与预期一致.

boxOffice = re.findall(r'<div class="movie-index-content box">\s+<span class="stonefont">(.*?)</span>', html)
boxnumber = str()
for i in range(len(boxOffice[0].split("."))):for j in range(len(boxOffice[0].split(".")[i].split(";")) - 1):boxnumber = boxnumber + str(numDict[boxOffice[0].split(".")[i].split(";")[j] + ";"])#print(numDict[boxOffice[0].split(".")[i].split(";")[j] + ";"])boxnumber = boxnumber + "."
print(boxnumber[0:-1])

运行结果:
在这里插入图片描述
与预期保持一致(注意: 这里我们只考虑了这一个样本, 也就是说box office数字的排列方式是固定的, 当获取不同的样本时, 数位可能会有所不同, 需要结合实际情况做出调整)

step3

将全部代码组合

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re
from fontTools.ttLib import TTFontproxies = {'https': '203.86.26.9:3128'
}  #设置代理
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"} #设置头部
#response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
print("页面状态码:{0}".format(response.status_code))
soup = BeautifulSoup(response.text, "html.parser")
#print(soup)
div = soup.find_all("div", {"class": "movie-brief-container"})[0]
CN_title = div.h1.text
EN_title = div.div.text
MoveType = []for i in range(len(div.find_all("li")[0].find_all("a"))):move_type = div.find_all("li")[0].find_all("a")[i].textMoveType.append(move_type)land = div.find_all("li")[1].text
Land = land.replace("\n", "").lstrip().rstrip().replace(" ", "").split("/")    fontUrl = "http://vfile.meituan.net/colorstone/0e34b53354e3b3af841216ade738e4312268.woff"
r = requests.get(fontUrl)
with open("D://Desktop//stonefont.woff", "wb") as code:code.write(r.content)
fontPath = "D://Desktop//0e34b53354e3b3af841216ade738e4312268.woff"
font = TTFont(fontPath)
fontNumber = [8, 4, 1, 2, 7, 9, 5, 6, 3, 0]
#print(font.getGlyphOrder()[2::])numDict = {}
for i in range(len(newList)):numDict[newList[i]] = fontNumber[i]#print(newList[i],fontNumber[i])html = response.content.decode("utf-8")
star = re.findall(r'<span class="index-left info-num ">\s+<span class="stonefont">(.*?)</span>\s+</span>', html)
starNumber = str()
for i in range(len(star[0].split("."))):if star[0].split(".")[i] in numDict:starNumber = starNumber + "." + str(numDict[star[0].split(".")[i]])#print(numDict[star[0].split(".")[i]], end=".")boxOffice = re.findall(r'<div class="movie-index-content box">\s+<span class="stonefont">(.*?)</span>', html)
boxnumber = str()
for i in range(len(boxOffice[0].split("."))):for j in range(len(boxOffice[0].split(".")[i].split(";")) - 1):boxnumber = boxnumber + str(numDict[boxOffice[0].split(".")[i].split(";")[j] + ";"])#print(numDict[boxOffice[0].split(".")[i].split(";")[j] + ";"])boxnumber = boxnumber + "."abstract = soup.find_all("span", {"class": "dra"})[0].textprint("name_CN:{0}, name_EN:{1}".format(CN_title,EN_title))
print("type:{0}".format(MoveType))
print("location:{0}, time:{1}".format(Land[0],Land[1]))
print("rationg:{0}".format(starNumber[1::]))
print("box office:{0}".format(boxnumber[0:-1]))
print("abstract:{0}".format(abstract))

至此, 我们需要的内容就获取完毕了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_813514.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某网站内容获取

准备工作 import re #正则表达式 import requests #获取页面信息 import pandas as pd #数据处理 import time 页面分析 直接get无法获得任何信息, 我们采取另一种思路: 来到network, 查看ajax请求, 同时下拉搜索内容 可以看到, 当不断下拉刷新内容时, 产生了形如https…

某房屋中介网站爬虫实例

url: https://hangzhou.anjuke.com/community/ 相比较房天下, 只需要在请求头中加入cookie即可(不带cookie会被封ip) 直接上代码&#xff1a; from bs4 import BeautifulSoup import requests import re import pandas as pd import time #需要杭州: 区域&#xff0c;地址&…

5个值得推荐的英语学习网站及1个英语学习App

1、练习听力 美国国家公共广播电台NPR&#xff1a;http://www.npr.org/特点&#xff1a;标准美式英语。 建议&#xff1a;每天花三十分钟左右&#xff0c;反复听英语广播&#xff0c;这是听力过关的必经之路。点击网页中左边“BROWSE TOPICS”下面的“News”选项。选择自己有…

Java开发必知道的国外10大网站

1、https://www.google.com/ 不解释 2、https://stackoverflow.com 里面包含各种开发遇到的问题及答案&#xff0c;质量比较高。 3、https://github.com/ 免费的开源代码托管网站&#xff0c;包括了许多开源的项目及示例项目等。 4、https://dzone.com/ 提供技术新闻、编程教…

自己刚写的php的api 如何访问_网站被攻击了!我是如何数据分析来排查的!

背景事故: 给小白练习SQL的网站瘫痪了时间: 20190811 凌晨1点开始&#xff0c;持续90分钟原因: 被一位来自深圳的"朋友"攻击这篇文章带个你什么如何判断异常如何在数据上定位异常真的是活生生的案例&#xff0c;虽然我完全不希望这种案例再次发生关于我这个SQL学习网…

无法从该网站添加应用_一张图告诉你,为什么近期所有网站应用都无法安装且签名...

最近果子后台收到的最多的消息就是 果子&#xff0c;果子&#xff0c;为啥网站应用下载失败呀&#xff0c;为啥网站的app不更新证书啦。 为什么越狱工具都出来了&#xff0c;却迟迟没有网站更新在线下载呀。 iOS13.5已经修复了曾经最火的“断网下载法”来使用企业应用。 今天给…

第四课 建站准备—配置文件修改

第四课 建站准备—配置文件修改时间:2011-06-18 23:51来源:未知 作者:admin点击: 103 次这一节课&#xff0c;我们来给大家说一下织梦CMS配置文件的修改。为什么要修改呢&#xff1f;我们先来看一个例子。 首先进入后台&#xff0c;发布一篇文章&#xff0c;标题就为“百通建站…

JS代码优化技巧之通俗版 分类: SEO推广

JS代码优化技巧之通俗版 分类: SEO推广 | 评论: 276 | 浏览:20421 分享到:36如果你问我网站中最影响网站打开速度的是什么&#xff1f;我会告诉是网站中的javascript&#xff0c;简称JS。模板中引用的JS文件越多&#xff0c;打开速度越慢&#xff0c;这点我深有体会&#x…

apache主机头设置-一台服务器支持多个网站,多个域名 ... [复制链接]

如何在一台服务器上运行多个网站&#xff0c;并对应不同的网址呢&#xff1f;这个问题一直没有解决&#xff0c;在网上找了很多次&#xff0c;很简单&#xff0c;但每次试验都没有成功.直到遇到下面的介绍&#xff1a;当apache在读取httpd.conf过程中遇到NameVirtuaHost指令时&…

linux内核break信号,信号处理 - Linux内核中的信号机制_Linux编程_Linux公社-Linux系统门户网站...

当进程被调度时&#xff0c;会调用do_notify_resume()来处理信号队列中的信号。信号处理主要就是调用sighand_struct结构中对应的信号处理函数。do_notify_resume()(arch/arm/kernel/signal.c)函数的定义如下&#xff1a;asmlinkage voiddo_notify_resume(struct pt_regs *regs…

网站服务器web空间文件删除不了怎么办

网站服务器web空间文件删除不了怎么办 网站web空间用了有一年多了&#xff0c;近期想重装下网站&#xff0c;所以就把原来的web空间文件全删除了&#xff0c;后来发现其中有一个文件怎么删除都删除不了&#xff1f;如何解决web空间删除不了的文件吗&#xff1f;满意答案haowz 来…

织梦Dedecms网站安全优化之重定义目录

http://www.111cn.net/wy/Dedecms/56615.htm织梦Dedecms网站安全优化之重定义目录www.111cn.net 编辑:Space 来源:转载dedecms的中的目录都是固定好了这样很容易给黑客来获取相关信息了&#xff0c;下面我们来看看织梦Dedecms网站安全优化之重定义目录方法&#xff0c;希望文章…

黑客如何快速查找网站后台地址方法整理

黑客如何快速查找网站后台地址方法整理来源&#xff1a;本站整理 作者&#xff1a;小残搏客 时间&#xff1a;2014-06-15 TAG&#xff1a; 我要投稿小结一些方法..写了有遗漏之处请路过的各位指出来..想必许多黑客在入侵网站的时候总是为了有用户密码找不到后台而烦恼吧&#x…

21个为您的网站和博客提供的免费视频播放器

<object id"video1" classid"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width"320" height"240" border"0"><br />  <br />  <param name"ShowDisplay" value"0"><…

黑客如何快速查找网站后台地址方法整理

黑客如何快速查找网站后台地址方法整理来源&#xff1a;本站整理 作者&#xff1a;小残搏客 时间&#xff1a;2014-06-15 TAG&#xff1a; 我要投稿小结一些方法..写了有遗漏之处请路过的各位指出来..想必许多黑客在入侵网站的时候总是为了有用户密码找不到后台而烦恼吧&#x…

windows2008操作系统网站发布后,为什么外网仍旧无法访问2011-08-05 10:19

windows2008操作系统网站发布后&#xff0c;为什么外网仍旧无法访问2011-08-05 10:19 现象我们网站使用VSB网站群管理平台&#xff0c;网站已经实施完成且执行发布成功。网站域名解析成功&#xff0c;通过ping能够得到正确的解析地址。但是通过域名访问发布后的网站&#xff0c…

PHP如何给网站开启压缩输出增强网站访问速度

分享两种压缩页面输出数据以提高网页访问速度的方法&#xff0c;一种是通过使用php zlib扩展实现页面gzip压缩输出&#xff08;使用php的内置函数ob_gzhandler进行gzip压缩输出&#xff09;&#xff0c;另外一种方法是是通过修改php.ini配置文件开启php gzip以实现压缩页面信息…

阿里云Windows2008外网无法访问开启80端口实现外网访问网站

在Windows 2008使用WAMP建立能够运行PHP网站的环境&#xff0c;在本地测试可以访问网站&#xff0c;但是内网和外网均无法访问网站&#xff0c;通过关闭防火墙测试得知是防火墙屏蔽80端口&#xff0c;需要在防火墙中允许外网对80端口的访问&#xff0c;当然关闭防火墙可以一劳永…

网站被百度停止推广并提示网站存在安全风险,不宜推广的处理方案

春节刚过完&#xff0c;上班的第一天&#xff0c;公司网站被百度停止推广了&#xff0c;百度推广提示&#xff1a;您的url被百度杀毒提示存在网址安全风险&#xff0c;故物料不宜推广&#xff1b;若有异议&#xff0c;请进入百度杀毒申诉通道申诉。第一时间联系了当地百度公司客…

网站被劫持到其它网站如何解决

前段时间网站被黑了&#xff0c;从百度打开网站直接被劫持跳转到了cai票&#xff0c;du博网站上去&#xff0c;网站的首页index.html文件也被篡改成一些什么北京sai车&#xff0c;pk10&#xff0c;一些cai票的关键词内容&#xff0c;搞得网站根本无法正常浏览&#xff0c;从百度…