通过本案例[豆瓣电影Top250信息爬取]锻炼除正则表达式之外两种信息解析方式:Xpath和PyQuery。
爬取url地址:https://movie.douban.com/top250
分析:
分析url地址:每页25条数据,共计10页
第1页:https://movie.douban.com/top250?start=0
第2页:https://movie.douban.com/top250?start=25
第3页:https://movie.douban.com/top250?start=50
...
结果:
for i in range(10):
url = "https://movie.douban.com/top250?start="+str(i*25)
分析网页源代码内容:每部电影信息都是放在
...
具体实现代码如下:
from requests.exceptions import RequestException
from lxml import etree
from pyquery import PyQuery as pq
import requests
import re,time,json
def getPage(url):
'''爬取指定url页面信息'''
try:
#定义请求头信息
headers = {
'User-Agent':'User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1'
}
# 执行爬取
res = requests.get(url,headers=headers)
#判断响应状态,并响应爬取内容
if res.status_code == 200:
return res.text
else:
return None
except RequestException:
return None
def parsePage(content):
'''解析爬取网页中的内容,并返回字段结果'''
print(content)
# =========使用pyquery解析==================
# 解析HTML文档
doc = pq(content)
#获取网页中所有标签并遍历输出标签名
items = doc("div.item")
#遍历封装数据并返回
for item in items.items():
yield {
'index':item.find("div.pic em").text(),
'image':item.find("div.pic img").attr('src'),
'title':item.find("div.hd span.title").text(),
'actor':item.find("div.bd p:eq(0)").text(),
'score':item.find("div.bd div.star span.rating_num").text(),
}
'''
# =======使用xpath解析====================
# 解析HTML文档,返回根节点对象
html = etree.HTML(content)
#获取网页中所有标签并遍历输出标签名
items = html.xpath('//div[@class="item"]')
#遍历封装数据并返回
for item in items:
yield {
'index':item.xpath('.//div/em[@class=""]/text()')[0],
'image':item.xpath('.//img[@width="100"]/@src')[0],
'title':item.xpath('.//span[@class="title"]/text()')[0],
'actor':item.xpath('.//p[@class=""]/text()')[0],
'score':item.xpath('.//span[@class="rating_num"]/text()'),
#'time':item[4].strip()[5:],
}
'''
def writeFile(content):
'''执行文件追加写操作'''
with open("./result.txt",'a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False) + "\n")
#json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
def main(offset):
''' 主程序函数,负责调度执行爬虫处理 '''
url = 'https://movie.douban.com/top250?start=' + str(offset)
html = getPage(url)
# 判断是否爬取到数据,并调用解析函数
if html:
for item in parsePage(html):
writeFile(item)
# 判断当前执行是否为主程序运行,并遍历调用主函数爬取数据
if __name__ == '__main__':
for i in range(10):
main(offset=i*25)
time.sleep(1)
审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
python
+关注
关注
51文章
4676浏览量
83467 -
爬虫
+关注
关注
0文章
77浏览量
6517
发布评论请先 登录
相关推荐
带PFC电路的75W输出功率、高效率的单级反激式电源TOP250YN中文资料
电子发烧友网站提供《带PFC电路的75W输出功率、高效率的单级反激式电源TOP250YN中文资料.pdf》资料免费下载
发表于 03-22 09:37
•1次下载
带PFC电路的75W输出功率、高效率的单级反激式电源TOP250YN75W数据手册
电子发烧友网站提供《带PFC电路的75W输出功率、高效率的单级反激式电源TOP250YN75W数据手册.pdf》资料免费下载
发表于 03-22 09:28
•0次下载
华谊兄弟电影乐园联合亮风台解锁新玩法,邀你在电影元宇宙里“过大年”
2024年贺岁档即将来到,九部影片燃爆集结,堪称“神仙打架”!看电影一直都是“春节主菜”,而就在大年初一(2月10日),苏州华谊兄弟电影乐园的电影工坊将解锁酷炫观影新方式,让游客“酥酥服服”沉浸游览
top命令如何进入选项
top命令是一个常用的Linux系统性能监控工具,可以实时地监视系统的整体运行情况。通过使用top命令,我们可以查看系统的负载情况、进程的CPU和内存使用情况等。想要进入top命令的选项,需要在终端
Analog On Top的SOC如何做Top设计?
Analog On Top的SOC如何做Top设计? 简介: 在片上系统(SOC)的世界里,模拟运算(AOT)方法为设计过程带来了独特的风味。与数字逻辑处于顶端的传统方法不同,AOT颠覆了层次结构
PCB设计安规,电气间隙与爬电距离要点
在PCB设计中,爬电距离和电气间隙是两个非常重要的安规要求。它们都涉及到PCB上元件之间的安全距离,以确保在元件故障时,不会发生短路或其他安全问题。
爬电距离是指两个连接的元件之间的距离,通常是通过
发表于 11-03 11:16
超8万块,群雄“逐鹿”电影屏
5月,洲明科技在LED电影屏市场再下一城。洲明UC-A42成功通过相关检验测试,成为其第三款获得DCI认证的电影放映系统产品。
发表于 06-01 10:25
•313次阅读
如何在mobdro上看电影时连接wifi?
我正在使用安卓智能设备。连接中断了,这并不好玩。但是我已经重新启动了设备,但仍然无法连接到 wifi 以在 mobdro 上观看电影。
发表于 05-16 08:50
评论