欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

记一次简单爬虫(豆瓣/dytt)

程序员文章站 2022-10-18 17:57:56
磕磕绊绊学python一个月,这次到正则表达式终于能写点有趣的东西,在此作个记录: ————————————————————————————————————————————————— 1.爬取豆瓣电影榜前250名单 运行环境: pycharm-professional-2018.2.4 3.7.0 ......

 

磕磕绊绊学python一个月,这次到正则表达式终于能写点有趣的东西,在此作个记录:

 

—————————————————————————————————————————————————

 

1.爬取豆瓣电影榜前250名单

 

运行环境:

pycharm-professional-2018.2.4

3.7.0 (v3.7.0:1bf9cc5093, jun 27 2018, 04:59:51) [msc v.1914 64 bit (amd64)]   

 

成品效果:

记一次简单爬虫(豆瓣/dytt)

记一次简单爬虫(豆瓣/dytt)

 

相关代码:

 1 from urllib.request import urlopen
 2 import re
 3 # import ssl  # 若有数字签名问题可用
 4 # ssl._create_default_https_context = ssl._create_unverified_context
 5 
 6 
 7 # 写正则规则
 8 obj = re.compile(r'<div class="item">.*?<span class="title">(?p<name>.*?)</span>.*?导演:(?p<daoyan>.*?)&nbsp;.*?'
 9                  r'主演:(?p<zhuyan>.*?)<br>\n                            (?p<shijian>.*?)&nbsp;/&nbsp;(?p<diqu>.*?)&nbsp;'
10                  r'/&nbsp;(?p<leixing>.*?)\n.*?<span class="rating_num" property="v:average">(?p<fen>.*?)</span>.*?<span>'
11                  r'(?p<renshu>.*?)评价</span>.*?<span class="inq">(?p<jianping>.*?)</span>',re.s)  # re.s 干掉换行
12 
13 # 转码 获取内容
14 def getcontent(url):
15     content = urlopen(url).read().decode("utf-8")
16     return content
17 
18 # 匹配页面内容 返回一个迭代器
19 def parsecontent(content):
20     iiter = obj.finditer(content)
21     for el in iiter:
22         yield {
23             "name":el.group("name"),
24             "daoyan":el.group("daoyan"),
25             "zhuyan":el.group("zhuyan"),
26             "shijian":el.group("shijian"),
27             "diqu":el.group("diqu"),
28             "leixing":el.group("leixing"),
29             "fen":el.group("fen"),
30             "renshu":el.group("renshu"),
31             "jianping":el.group("jianping")
32         }
33 
34 
35 for i in range(10):
36     url = "https://movie.douban.com/top250?start=%s&filter=" % (i*25)  # 循环页面10
37     print(url)
38     g = parsecontent(getcontent(url))  # 匹配获取的内容返回给g
39     f = open("douban_movie.txt",mode="a",encoding="utf-8")
40     for el in g:
41         f.write(str(el)+"\n")  # 写入到txt 注意加上换行
42 
43     # f.write("==============================================")  # 测试分页
44     f.close()

 

 

2.爬取某站最新电影和下载地址

 

运行环境:

pycharm-professional-2018.2.4

3.7.0 (v3.7.0:1bf9cc5093, jun 27 2018, 04:59:51) [msc v.1914 64 bit (amd64)]   

 

成品效果:

记一次简单爬虫(豆瓣/dytt)

 

相关代码:

 1 from urllib.request import urlopen
 2 import json
 3 import re
 4 
 5 # 获取主页面内容
 6 url = "https://www.dytt8.net/"
 7 content = urlopen(url).read().decode("gbk")
 8 # print(content)
 9 
10 # 正则
11 obj = re.compile(r'.*?最新电影下载</a>]<a href=\'(?p<url1>.*?)\'>', re.s)
12 obj1 = re.compile(r'.*?<div id="zoom">.*?<br />◎片  名(?p<name>.*?)<br />.*?bgcolor="#fdfddf"><a href="(?p<download>.*?)">', re.s)
13 
14 
15 def get_content(content):
16     res = obj.finditer(content)
17     f = open('movie_dytt.json', mode='w', encoding='utf-8')
18     for el in res:
19         res = el.group("url1")
20         res = url + res  # 拼接子页面网址
21 
22         content1 = urlopen(res).read().decode("gbk")  # 获取子页面内容
23         lst = obj1.findall(content1)  # 匹配obj1返回一个列表
24         # print(lst)  # 元组
25         name = lst[0][0]
26         download = lst[0][1]
27         s = json.dumps({"name":name,"download":download},ensure_ascii=false)
28         f.write(s+"\n")
29     f.flush()
30     f.close()
31 
32 
33 get_content(content)  # 调用函数 执行