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 ...
随机推荐
- 洛谷 P4183 - [USACO18JAN]Cow at Large P(点分治)
洛谷题面传送门 点分治 hot tea. 首先考虑什么样的点能够对以 \(u\) 为根的答案产生 \(1\) 的贡献.我们考虑以 \(u\) 为根对整棵树进行一遍 DFS.那么对于一个点 \(v\), ...
- Codeforces 840E - In a Trap(树分块+trie)
Codeforces 题面传送门 & 洛谷题面传送门 一道非常精彩,同时也很经典的题目.和这场的 C 一样经典 首先看到这个数据范围先猜正解复杂度:\(n\) 级别大于 \(q\),所以大概是 ...
- JS 执行上下文的一次理解
执行上下文 执行上下文概念 当代码运行时,会产生一个对应的执行环境,在这个环境中,变量会被事先提出来(变量提升),代码从上往下开始执行,就叫做执行上下文. 注:在定义变量是未直接赋值,使用默认值 un ...
- Godunov's 定理
Godunov's theorem 转自Wiki 目录 Godunov's theorem 简介 定理 定理1. 单调保持性(Monotonicity preserving) 定理2. Godunov ...
- Docker 外部访问容器Pp、数据管理volume、网络network 介绍
Docker 外部访问容器Pp.数据管理volume.网络network 介绍 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来 指定端口映射. ...
- 爬虫动态渲染页面爬取之selenium驱动chrome浏览器的使用
Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,可以用其进行网页动态渲染页面的爬取. 支持的浏览器包括IE(7, 8, 9, 10 ...
- Linux—find在指定路径下查找文件或目录
find /指定路径 -name "*filename*" find /指定路径 -name "*filename*" 2>/dev/null ...
- 出现NoClassDefFoundError,始终无法引入jar的解决
在拉取代码后,项目的部分版本与本地存在的不一定一致,所以IDEA会自动下载并引入,但是在启动时可能存在java.lang.NoClassDefFoundError这个报错 比如引入marshallin ...
- tomcat在eclipse上发布,Perference下的server找不到解决办法
help--->Install New software得到如下所示 下面work with选项的内容与你的eclipse版本有关 我的eclipse版本为eclipse-java-2019-0 ...
- 【Reverse】初遇花指令
解密花指令 全文参考了一个大师傅的blog:https://blog.csdn.net/zhangmiaoping23/article/details/38400393 介绍 花指令是对抗反汇编的有效 ...