python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息

思路

1. 要获得怎么样的数据

2. 找到数据来源

3. 模拟浏览器发送请求获得数据

4. 处理数据,保存数据

第一步:

在这里数据是豆瓣top250中高于指定分数的电影信息

信息有:名称,评分,格言

第二步:

数据在网页html中,这里我使用xpath语法分析htm代码提取数据即可

当然也有其它方法比如:找出页面请求的数据包,抓包分析,找出数据来源

故猜测第k页的url只需start为25*(k-1)

所以我们枚举url,提取有效的数据。

第三步:

获得网页源码是一般是发送get请求。故

制定请求头

找到url

模拟浏览器发送数据def GetHelpfulElement(Html,socre):#根据html代码获得希望的element列表

Xpath=r'//div[@ class="item"]//div[@ class="star"]/span[2][text()>={}]/../../..'.format(socre)

HtmlElement=etree.HTML(Html)

return HtmlElement.xpath(Xpath)

def GetHtml(url):#根据url获得html字符串

Headers={

"User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

}

resp=requests.get(url,headers=Headers)

return resp.content.decode()

最后一步就是代码了

数据保存在date文件。

mport requests

from lxml import etree

from pprint import pprint

import re

'''

目的:爬取豆瓣top250中 评分高于指定值的电影名字,导演,演员信息,评分。

url="https://movie.douban.com/top250?start={}"25的增加,10次即可

针对每个html字符串用xpath语法进行处理

1.找出符合条件的element元素

2.对element元素进行信息提取成字典形式

3.把每一页的信息整理成一个列表追加即可

'''

def GetHelpfulElement(Html,socre):#根据html代码获得希望的element列表

Xpath=r'//div[@ class="item"]//div[@ class="star"]/span[2][text()>={}]/../../..'.format(socre)

HtmlElement=etree.HTML(Html)

return HtmlElement.xpath(Xpath)

def GetHtml(url):#根据url获得html字符串

Headers={

"User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

}

resp=requests.get(url,headers=Headers)

return resp.content.decode()

def HandleList(Mylist):#处理xpath的获得的列表 返回第一个,否则返回None

return Mylist[0] if len(Mylist)!=0 else None

def ElementToDict(Element):#一个elemengt信息转化为dict

ret={}

html=etree.tostring(Element,encoding="utf-8").decode()

Element=etree.HTML(html)#不知道为什么只有这样,每次函数得到的信息才不同

RatingXpath=r'//span[@class="rating_num"]/text()'

TitleXpath=r'//a/span[@class="title"]/text()'

QuoteXpath=r'//span[@class="inq"]/text()'

ret['rating:num']=HandleList(Element.xpath(RatingXpath))

ret['title'] = HandleList(Element.xpath(TitleXpath))

ret['quote'] = HandleList(Element.xpath(QuoteXpath))

return ret

def ElementlistToDictlist(Elementlist):#element列表转化为有用的dict列表

Mylist=[]

for i in Elementlist:

Mylist.append(ElementToDict(i))

return Mylist

def Save(Mydict):#保存一条信息

Keylist = ['title', 'rating:num', 'quote']

NameList = ['名称', '评分', '格言']

with open('date.txt','a',encoding='utf-8') as fp:

for i in range(len(Keylist)):

fp.write(NameList[i])

fp.write(' : ')

fp.write(Mydict[Keylist[i]] if Mydict[Keylist[i]]!=None else " ")

fp.write('\n')

fp.write('\n')

def run(score):#实现主要逻辑

TempUrl = r"https://movie.douban.com/top250?start={}"

Dictlist =[]

for numbers in range(10):

Url = TempUrl.format(numbers * 25)

ElementList = GetHelpfulElement(GetHtml(Url), score)

TempDictList= ElementlistToDictlist(ElementList)

global total

total+=len(TempDictList)

for i in TempDictList:

Save(i)

if __name__ == '__main__':

RatingNum=float(input("请输入最低评分:"))

total=0

print("请稍等...")

run(RatingNum)

print("共有:",total,"个结果。")

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

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

相关文章

如何在 Asp.Net Core MVC 中处理 null 值

译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html传统的 asp.net mvc 对应着 .netcore 中的 asp.net core mvc,可以利用 asp.net core mvc 去构建跨平台,可扩展,高性能的w…

算法设计与分析——动态规划——最长公共子序列

#include<iostream> #include<stdio.h> #include<string.h> #include<bits/stdc.h> #define MAXLEN 50 using namespace std;void LCSlength(int m,int n,char *x,char *y,int c[][MAXLEN],int b[][MAXLEN]) {for(int i0;i<m;i)//m为字符个数 {c[i]…

python2.7教程 pdf_PYTHON基础教程至60课(2.7版本)整理

python基础教程至60课整理2014年7月10日&#xff1a;(整理前几天内容)1.疑惑&#xff1a;a.forscoreindata[1:]:解答&#xff1a;将score一一赋data中从1号(第二个)开始到最后一个元素的值b.forIinrange(3):解答:将i赋予从零到三的值。2.配置系统环境变量&#xff1a;在Path变量…

程序员过关斩将--论系统设计的高可扩展性

“此文仅仅代表个人意见&#xff0c;并非行业标准“MQ是万能的高扩展方式&#xff1f;“面向接口是万能的高扩展方式&#xff1f;说到系统设计的三高&#xff0c;每一高都是一个很庞大的话题&#xff0c;甚至可以用一本书甚至N本书来详细阐述。其中高可扩展性是系统架构的众多目…

算法设计与分析———动态规划———最大子段和

问题描述&#xff1a; 最大子段和问题是将一个n个整数的序列a[1]&#xff0c;a[2]….a[n]中字段a[first]….a[last]之和&#xff0c;(1<first<last<n)求这些子段和中最大的。 例如&#xff08;a[1],a[2],a[3],a[4],a[5],a[6]&#xff09;(-2,11,-4,13,-5,-2)时&#x…

python2中的unicode_在python 3和2中工作的Unicode文字

So I have a python script that Id prefer worked on python 3.2 and 2.7 just for convenience.Is there a way to have unicode literals that work in both? E.g.#coding: utf-8whatever שלוםThe above code would require a unicode string in python 2.x (u) and i…

Docker Vs Podman

翻译自 Chetansingh 2020年4月24日的博文《Docker Vs Podman》 [1]容器化的一场全新革命是从 Docker 开始的&#xff0c;Docker 的守护进程管理着所有的事情&#xff0c;并成为最受欢迎和广泛使用的容器管理系统之一。但是&#xff0c;请稍等&#xff01;您真的会假设 Docker 是…

算法设计与分析——动态规划——01背包问题

#include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背包动态规划算法 构造二维表 int knapsack_problem( int n,int *weight,int *value,int capacity,int **m,int *flag) {for(int i0;i<capaci…

python量化常用_Python量化常用函数

#-*- coding: utf-8 -*-#Author: fangbei#Date: 2017-08-26#Original:price_str 30.14, 29.58, 26.36, 32.56, 32.82price_str price_str.replace( , ) #删除空格price_array price_str.split(,) #转成数组date_array[]date_base 20170118# for 循环for _ in range(0, len(pri…

让 CefSharp.WinForms 应用程序同时支持32位(x86)和64位(x64)的解决方案

当我们为基于 .NET Framework 的 WinForm 程序增加 CefSharp.WinForms 依赖后&#xff0c;可能会遇到以下报错信息&#xff1a;CefSharp.Common is unable to proceeed as your current Platform is ‘AnyCPU’. To target AnyCPU please read https://github.com/cefsharp/Cef…

算法设计与分析——贪心算法——活动安排问题

问题描述&#xff1a;设有n个活动的集合E{1,2,…,n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;如演讲会场等&#xff0c;而在同一时间内只有一个活动能使用这一资源。 每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi 。 如果选择了活动…

如何使用 C# 中的 Action, Func,Predicate

译文链接&#xff1a;https://www.infoworld.com/article/3057152/how-to-work-with-action-func-and-predicate-delegates-in-csharp.html?nsdrtrue委托是一个类型安全的函数指针&#xff0c;它可以引用与委托具有相同签名的方法。委托常用于实现回调方法或者事件机制&#x…

python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...

我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是&#xff1a;a)从文本文件中读取微分方程组b)解决系统问题我已经阅读了this question和this other question,它们几乎就是我要找的,但我还有一个额外的问题&#xff1a;我事先并不知道方程组的形式,所以…

c语言——刷新控制台界面与返回上一级

#include<iostream> #include<stdlib.h> using namespace std;int main() {while(1){system("cls");//刷新控制台程序界面 cout<<"请输入1&#xff1a;进入下一级程序A:"<<endl;cout<<"请输入2&#xff1a;进入下一级程…

C# :异步编程的注意点

在上一篇《C#&#xff1a;异步编程中的 async 和 await》 中简单介绍了在 C# 中的异步编程以及 async 和 await 编程模型&#xff0c;本文介绍下异步编程的注意事项&#xff0c;主要有以下几个方面。同步中调用异步在同步代码中调用异步代码&#xff0c;容易导致死锁&#xff0…

makefile 打印变量_[Makefile] 缩进与空格--记录踩过的坑

今天折腾了好久&#xff0c;就为了debug两个makefile的bug。虽然最后找到原因了&#xff0c;但是&#xff0c;怎么说呢&#xff0c;用现在流行的话来说&#xff0c;实在是意难平啊&#xff01;必须写一篇记录一下&#xff01;第一个问题&#xff0c;是个语法高亮问题。今天观察…

算法设计与分析——贪心算法——背包问题

0-1背包问题&#xff1a; 前提&#xff1a;给定n种物品和一个背包。物品i的重量是Wi&#xff0c;其价值为Vi&#xff0c;背包的容量为C。 问题&#xff1a;应如何选择装入背包的物品&#xff0c;使得装入背包中物品的总价值最大? 背包问题&#xff1a; 与0-1背包问题类似&…

python函数模块化教程_【软件测试教程】Python模块化以及内置模块的使用

一&#xff1a;什么是模块模块是一个包含所有你定义的函数和变量的文件&#xff0c;其后缀名是.py。模块可以被别的程序引入&#xff0c;以使用该模块中的函数等功能。二&#xff1a;模块类型1&#xff1a;自定义模块由编程人员自己写的模块。自定义模块时要注意命名&#xff0…

企业级精致 Blazor 套件 BootstrapBlazor 介绍

BootstrapBlazor1、前言 Blazor 作为一种 Web 开发的新技术已经发展有一段时间了&#xff0c;有些人标称 无 JS 无 TS&#xff0c;我觉得有点误导新人的意味&#xff0c;也有人文章大肆宣传 Blazor 是 JavaScript 的终结者&#xff0c;是为了替代 JavaScript 而生的&#xff0c…

算法设计与分析——贪心算法——最优装载问题

有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下&#xff0c;将尽可能多的集装箱装上轮船。 #include<iostream> #include<algorithm> #include<cstring> using namespace std;typedef str…