豆瓣电影

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">&nbsp;/&nbsp;(.*?)</span>.*?<span class="other">&nbsp;/&nbsp;'
'(.*?)</span>.*?<p class="">.*? (.*?)&nbsp;&nbsp;&nbsp;(.*?)<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">&nbsp;/&nbsp;(.*?)</span>.*?<span class="other">&nbsp;/&nbsp;'
'(.*?)</span>.*?<p class="">.*? (.*?)&nbsp;&nbsp;&nbsp;(.*?)<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">&nbsp;/&nbsp;(.*?)</span>.*?<span class="other">&nbsp;/&nbsp;'
'(.*?)</span>.*?<p class="">.*? (.*?)&nbsp;&nbsp;&nbsp;(.*?)<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的更多相关文章

  1. python 豆瓣top250电影的爬取

    我们先看一下豆瓣的robot.txt 然后我们查看top250的网页链接和源代码 通过对比不难发现网页间只是start数字发生了变化. 我们可以知道电影内容都存在ol标签下的 div class属性为 ...

  2. Python爬虫之多线程下载豆瓣Top250电影图片

    爬虫项目介绍   本次爬虫项目将爬取豆瓣Top250电影的图片,其网址为:https://movie.douban.com/top250, 具体页面如下图所示:   本次爬虫项目将分别不使用多线程和使 ...

  3. Forward团队-爬虫豆瓣top250项目-项目总结

    托管平台地址:https://github.com/xyhcq/top250 小组名称:Forward团队 组长:马壮 成员:李志宇.刘子轩.年光宇.邢云淇.张良 我们这次团队项目内容是爬取豆瓣电影T ...

  4. Forward团队-爬虫豆瓣top250项目-项目进度

    项目地址:https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们 ...

  5. 正则表达式和豆瓣Top250的爬取练习

    datawhale任务2-爬取豆瓣top250 正则表达式 豆瓣250页面分析 完整代码 参考资料 正则表达式 正则表达式的功能用于实现字符串的特定模式精确检索或替换操作. 常用匹配模式 常用修饰符 ...

  6. 豆瓣Top250爬取

    第一次做爬虫项目,真的开心,非常顺利爬出了豆瓣Top250的电影 @^_^@ 自从今年6月份就开始自学python,断断续续一直没好好学.直到看了‘’老男孩python3全栈教育‘’,才有所收获.但是 ...

  7. 14、使用csv和excel存储豆瓣top250电影信息

        记得我们第三关的时候爬取了豆瓣TOP250的电影名/评分/推荐语/链接,现在呢,我们要把它们存储下来,记得用今天课上学的csv和excel,分别存储下来哦-       URL     htt ...

  8. 《Forward团队-爬虫豆瓣top250项目-开发文档》

    码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...

  9. 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!

    爬取豆瓣Top250电影的评分.海报.影评等数据!   本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序.   此项目过程是运用requests请求库来获取h ...

随机推荐

  1. 实战!spring Boot security+JWT 前后端分离架构认证登录!

    大家好,我是不才陈某~ 认证.授权是实战项目中必不可少的部分,而Spring Security则将作为首选安全组件,因此陈某新开了 <Spring Security 进阶> 这个专栏,写一 ...

  2. 面渣逆袭:HashMap追魂二十三问

    大家好,我是老三. HashMap作为我们熟悉的一种集合,可以说是面试必考题.简单的使用,再到原理.数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时. 1.能说一下HashMap ...

  3. Java跟JavaScript两者间的关系和区别

    想必很多人在刚接触和认识Java的时候,都好奇它与JavaScript之间的关系,长得这么像,难道是出自同门的升级版?嗯,他们的发明者确实颇具渊源,而且客观来说,JS确实相较Java更加简洁大众,但它 ...

  4. 洛谷 P4292 - [WC2010]重建计划(长链剖分+线段树)

    题面传送门 我!竟!然!独!立!A!C!了!这!道!题!incredible! 首先看到这类最大化某个分式的题目,可以套路地想到分数规划,考虑二分答案 \(mid\) 并检验是否存在合法的 \(S\) ...

  5. Parallel NetCDF 简介

    Parallel NetCDF API 所有C接口前加ncmpi前缀,Fortran接口前加nfmpi前缀 函数返回整数 NetCDF 状态变量 1. Variable and Parameter T ...

  6. 【WEGO】GO注释可视化

    导入数据 BGI开发的一款web工具,用于可视化GO注释结果.自己平时不用,但要介绍给别人,简单记录下要点,避免每次授课前自己忘了又要摸索. 地址:http://wego.genomics.org.c ...

  7. 58-Odd Even Linked List

    Odd Even Linked List My Submissions QuestionEditorial Solution Total Accepted: 29496 Total Submissio ...

  8. Identity Server 4 从入门到落地(三)—— 创建Web客户端

    书接上回,我们已经搭建好了基于Identity Server 4的认证服务和管理应用(如果还没有搭建,参看本系列前两部分,相关代码可以从github下载:https://github.com/zhen ...

  9. 10 — springboot整合mybatis — 更新完毕

    1.xml版 -- 复杂sql使用xml,简单sql使用注解 1).导入依赖 <!-- mybatis-spring-boot-starter是第三方( mybatis )jar包,不是spri ...

  10. day15 内置函数和模块

    day15 内置函数和模块 1.三元表达式 代码如下: x = 1 y = 2 res = 'ok' if x > y else 'no' print(res) 输出结果:no 2.内置函数:重 ...