python 豆瓣top250
豆瓣电影
import re
import requests
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"}
url='https://movie.douban.com/top250'
proxies={
'http':'http://123.207.96.189:80'
} #防止被锁ip
word=0
while True:
if word == 250:
break
p={'start':word}
movie=requests.get(url,proxies=proxies,headers=headers,params=p)
word=word+25
abc=movie.text
pattern=re.compile('<div class="item">.*?<em class="">(.*?)</em>.*? <a href="(.*?)">.*?<span class="title">(.*?)'
'</span>.*?<span class="title"> / (.*?)</span>.*?<span class="other"> / '
'(.*?)</span>.*?<p class="">.*? (.*?) (.*?)<br>'
'.*? property=(.*?)</span>.*?<span class="inq">(.*?)</span>',re.S) #正则表达式 re.S 使得.匹配换行符 re.I 忽略大小写
#print(pattern.findall(abc))
for i in pattern.findall(abc):
print(i)
豆瓣示例2
import requests
import re
import json
def param_html(url):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; "
"Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"}
proxies = {
'http': 'http://123.207.96.189:80'
}
response=requests.get(url,headers=headers,proxies=proxies)
text=response.text
pattern = re.compile('<div class="item">.*?<em class="">(.*?)</em>.*?src="(.*?)" class=".*?<a href="(.*?)">.*?'
'<span class="title">(.*?)'
'</span>.*?<span class="title"> / (.*?)</span>.*?<span class="other"> / '
'(.*?)</span>.*?<p class="">.*? (.*?) (.*?)<br>'
'.*? property=(.*?)</span>.*?<span class="inq">(.*?)</span>', re.S) # 正则表达式
# re.S 使得.匹配换行符 re.I 忽略大小写
# print(pattern.findall(abc))
results=pattern.findall(text) #生成符合正则表达式的小列表
for i in results: #输出小列表内容
print(i)
for i in results:
down_jpg(i[1]) #把小列表里的第二个值传给down_jpg (url)
yield {
'排名':i[0],
'电影名':i[3],
'英文名':i[4],
'港台地区':i[5]
} #使用1次此函数就会递归50个小字典 将小列表的值递归出来
def down_jpg(url):
r=requests.get(url)
regix=re.compile('/public/(.*?)$',re.S) #以 /public/(.*?)结尾的 所以要加$
filename=regix.search(url).group(1)
with open(filename,'wb') as f:
f.write(r.content)
def write_txt(str_obj):
with open('film.txt','a',encoding='utf-8') as f:
f.write(json.dumps(str_obj,ensure_ascii=False))
#追加写 以dumps形式
def main():
for i in range(0,26,25):
url='https://movie.douban.com/top250?start='+str(i)
for j in param_html(url): #将50个小字典写入文件
write_txt(j)
main()
示例3
import re
import requests
import json
headers = {"User-Agent": "Mozilla/5.0"
" (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"}
proxies = {
'http': 'http://123.207.96.189:80'
}
def get_html(proxies,headers):
url='https://movie.douban.com/top250'
word=0
while True:
if word == 50:
break
p={'start':word}
movie=requests.get(url,proxies=proxies,headers=headers,params=p)
word=word+25
text=movie.text
pattern=re.compile('<div class="item">.*?<em class="">(.*?)</em>.*?src="(.*?)" class="".*?<a href="(.*?)">.*?'
'<span class="title">(.*?)'
'</span>.*?<span class="title"> / (.*?)</span>.*?<span class="other"> / '
'(.*?)</span>.*?<p class="">.*? (.*?) (.*?)<br>'
'.*? property=(.*?)</span>.*?<span class="inq">(.*?)</span>',re.S) #正则表达式
for i in pattern.findall(text):
yield {
'排名':i[0],
'电影名':i[3],
'英文名':i[4],
'港台地区':i[5],
'图片链接':i[1],
}
def get_movie_brief():
with open('movie.txt','a',encoding='utf-8') as f:
for i in get_html(proxies,headers):
f.write(json.dumps(i,ensure_ascii=False))
def get_movie_pic(proxies,headers):
for i in get_html(proxies,headers):
url=i['图片链接']
re=requests.get(url,proxies=proxies,headers=headers)
pic=re.content
filename=str(i['排名'])+'.png'
with open(filename,"wb") as f:
f.write(pic)
get_movie_brief()
get_movie_pic(proxies,headers)
python 豆瓣top250的更多相关文章
- python 豆瓣top250电影的爬取
我们先看一下豆瓣的robot.txt 然后我们查看top250的网页链接和源代码 通过对比不难发现网页间只是start数字发生了变化. 我们可以知道电影内容都存在ol标签下的 div class属性为 ...
- Python爬虫之多线程下载豆瓣Top250电影图片
爬虫项目介绍 本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示: 本次爬虫项目将分别不使用多线程和使 ...
- Forward团队-爬虫豆瓣top250项目-项目总结
托管平台地址:https://github.com/xyhcq/top250 小组名称:Forward团队 组长:马壮 成员:李志宇.刘子轩.年光宇.邢云淇.张良 我们这次团队项目内容是爬取豆瓣电影T ...
- Forward团队-爬虫豆瓣top250项目-项目进度
项目地址:https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们 ...
- 正则表达式和豆瓣Top250的爬取练习
datawhale任务2-爬取豆瓣top250 正则表达式 豆瓣250页面分析 完整代码 参考资料 正则表达式 正则表达式的功能用于实现字符串的特定模式精确检索或替换操作. 常用匹配模式 常用修饰符 ...
- 豆瓣Top250爬取
第一次做爬虫项目,真的开心,非常顺利爬出了豆瓣Top250的电影 @^_^@ 自从今年6月份就开始自学python,断断续续一直没好好学.直到看了‘’老男孩python3全栈教育‘’,才有所收获.但是 ...
- 14、使用csv和excel存储豆瓣top250电影信息
记得我们第三关的时候爬取了豆瓣TOP250的电影名/评分/推荐语/链接,现在呢,我们要把它们存储下来,记得用今天课上学的csv和excel,分别存储下来哦- URL htt ...
- 《Forward团队-爬虫豆瓣top250项目-开发文档》
码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...
- 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!
爬取豆瓣Top250电影的评分.海报.影评等数据! 本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序. 此项目过程是运用requests请求库来获取h ...
随机推荐
- 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 【2020五校联考NOIP #8】狗
题面传送门 原题题号:Codeforces 883D 题意: 有 \(n\) 个位置,每个位置上要么有一条狗,要么有一根骨头,要么啥都没有. 现在你要给每个狗指定一个方向(朝左或朝右). 朝左的狗可以 ...
- 洛谷 P6667 - [清华集训2016] 如何优雅地求和(下降幂多项式,多项式)
题面传送门 wjz:<如何优雅地 AK NOI> 我:如何优雅地爆零 首先,按照这题总结出来的一个小套路,看到多项式与组合数结合的题,可以考虑将普通多项式转为下降幂多项式,因为下降幂和组合 ...
- Java设计模式之(十四)——策略模式
1.什么是策略模式? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strat ...
- Mike post process with Matlab toolbox
表怕,这个博客只有题目是英文的-- Matlab toolbox 安装 去DHI官网下载最新的MikeSDK2014与Matlab toolbox,下载好后安装MikeSDK2014,注意电脑上不能有 ...
- 二进制免编译My SQL
一 下载 MySQL 安装包教程 https://blog.csdn.net/zhan107876/article/details/100701135 ll -h mysql-5.6.47-linux ...
- 使用input+datalist简单实现实时匹配的可编辑下拉列表-并解决选定后浏览器默认只显示value的可读性问题
问题背景 最近小伙伴提了一个希望提高后台下拉列表可操作性的需求,原因是下拉列表选项过多,每次下拉选择比较费时费力且容易出错,硬着头皮啃了啃前端知识,网上搜寻了一些下拉列表实现的资料,这里总结一下. P ...
- 动态滑动登陆框-Html+Css+Js
动态滑动登陆框 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- ceph对象存储场景
安装ceph-radosgw [root@ceph-node1 ~]# cd /etc/ceph # 这里要注意ceph的源,要和之前安装的ceph集群同一个版本 [root@ceph-node1 c ...
- 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户
1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...