豆瓣电影

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)

最新文章

  1. 读书笔记汇总 - SQL必知必会(第4版)
  2. mysql5.7下的timestampn Error : Invalid default value for &#39;timestamp&#39;
  3. ng-repeat 嵌套 ng-switch 出错解决
  4. [转载]win32 计时器使用
  5. javascript动态添加form表单元素
  6. HDU 3351
  7. oracle 将查询到的数据插入表
  8. 求一个String 类型数组是不是都是回文,是返回1,否则返回-1
  9. nginx流量带宽等请求状态统计( ngx_req_status)
  10. 如何制作网页小动画?——gif or png
  11. MapReduce多用户任务调度器——容量调度器(Capacity Scheduler)原理和源码研究
  12. java:转换时间格式为String
  13. JS定时器设置、快速取消
  14. ajaxfileupload原理及用法,主要用于即想用ajax序列化传递参数,又必须上传文件
  15. 结合JDK源码看设计模式——策略模式
  16. CPU的load和使用率傻傻分不清
  17. 洛谷P4719 动态dp
  18. Keras 构建DNN 对用户名检测判断是否为非法用户名(从数据预处理到模型在线预测)
  19. 确认是否是因为做了物理I/O而导致的性能不佳
  20. #WEB安全基础 : HTTP协议 | 0x4 各种协议与HTTP协议的关系(一个报文的旅行)

热门文章

  1. CF1361C Johnny and Megan&#39;s Necklace
  2. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)
  3. go变量、类的概念以及类的使用方式,嵌套结构体
  4. python爬虫之正则表达式(用在其他地方也可)
  5. Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!
  6. Oracle-怎么在表的特定位置增加列
  7. Go语言核心36讲(Go语言实战与应用二十一)--学习笔记
  8. C#表格GridView显示2位百分比
  9. Hadoop的HA机制浅析
  10. C++构造函数和析构函数初步认识