爬取豆瓣影评TOP250Demo
来源:互联网 发布:linux 关机脚本 编辑:程序博客网 时间:2024/04/29 11:11
在爬取了糗事百科的段子之后,我发现还挺好玩的。接着想还有什么是好玩的呢?因为平时也喜欢看电影,就进入豆瓣电影的官网,看到豆瓣电影TOP250的页面。哎,把这个榜单爬下来应该挺好玩的吧。话不多说,马上行动。
这里用的还是最基础的urllib库和re库,通过正则表达式匹配需要的内容,当然,之后还会有更加高级的方法,但是多写简单的可以提高对原理的认识。简单总结一下python爬虫爬取简单静态网页的一般步骤:
1.打开待爬取的网页右键查看源代码,通常我们想要获取的信息都在指定的标签下,通过观察,找出规律。
2.用正则表达式表达这种规律。
3.添加代码根据正则表达式爬取相应内容,并输出在控制台/保存到文件/保存到数据库。
由于该Demo在整体上和上个爬取糗事百科的Demo类似,因此有的代码细节不赘述。
首先,看一下豆瓣电影TOP250的网页第一页源代码:
该Demo仅仅获取电影的名称和排名,可以看到<em class="">1</em>中的1就是排名,而<span class="title">肖申克的救赎</span>就是名称。因此设计正则表达式的模式为pattern = '<li>.*?<em class="">(.*?)</em>.*?<span class="title">(.*?)</span>.*?</li>'(如果发现输出结果和预期的不同,大概率是模式设计的不好,最好检查一下。)
TOP250有10页,每页放了25部电影,而观察每一页的url,会发现一个规律:
第一页的URL:
第三页的URL:
发现除了start=x外,其余都相同,而且第一页x=0,第三页x=50,........,第10页x=225。因此构造待爬取的URL为:
url = 'https://movie.douban.com/top250'for i in range(0, 250, 25): des_url = url + '?start=' + str(i) + '&filter='拿到了URL,就可以进行分析和爬取了,直接上代码:
# 获取URL内容的函数def getURLText(url): try: request = urllib.request.Request(url, headers = headers) response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content except Exception as e: print(e)
getURLText(url)函数根据传入的url获取网页信息并返回
# 对得到的内容进行解析,写入def doContent(path, content): pattern = re.compile('<li>.*?<em class="">(.*?)</em>.*?<span class="title">(.*?)</span>.*?</li>', re.S) items = re.findall(pattern, content) for item in items: f = open(path, 'a') # 格式化写入字符,%-10s表示在字符串后面添加占位符,文本左对齐 f.write('%-10s%-10s' % (item[0], item[1])) f.write('\n') f.close()
这里获取网页信息并保存在文件中。以下是完整代码:
import reimport urllib.requestuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent': user_agent}# 获取URL内容的函数def getURLText(url): try: request = urllib.request.Request(url, headers = headers) response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content except Exception as e: print(e)# 对得到的内容进行解析,写入def doContent(path, content): pattern = re.compile('<li>.*?<em class="">(.*?)</em>.*?<span class="title">(.*?)</span>.*?</li>', re.S) items = re.findall(pattern, content) for item in items: f = open(path, 'a') # 格式化写入字符,%-10s表示在字符串后面添加占位符,文本左对齐 f.write('%-10s%-10s' % (item[0], item[1])) f.write('\n') f.close()# 主函数def main(): url = 'https://movie.douban.com/top250' path = 'C:/Users/Administrator/Desktop/doubanMovieTop250.txt' for i in range(0, 250, 25): des_url = url + '?start=' + str(i) + '&filter=' content = getURLText(des_url) items = doContent(path, content)main()执行结果:
漂亮~看到自己写的代码跑出想要的结果才是最开心的啦,之后可以发挥想象力,爬出更有趣的内容。
加油!
- 爬取豆瓣影评TOP250Demo
- 爬取豆瓣影评数据
- 使用python爬取《长城》豆瓣影评
- 使用requests爬取豆瓣《长城》影评
- 爬虫实践---Scrapy-豆瓣电影影评&深度爬取
- 使用scrapy爬取豆瓣上面《战狼2》影评
- 爬取豆瓣的战狼影评(cookies 云词)
- python爬虫爬取豆瓣top250电影影评
- (8)Python爬虫——爬取豆瓣影评数据
- [转载]Python爬取豆瓣影评并生成词云图代码
- python爬取豆瓣上面<战狼2>的20w影评
- Python3网络爬虫:requests+mongodb+wordcloud 爬取豆瓣影评并生成词云
- 豆瓣影评 盲山
- 豆瓣影评 高地战
- 辩护人 豆瓣影评
- 杀戮演绎 豆瓣影评
- 假日 豆瓣影评
- Python 豆瓣影评抓取
- Vue+php 后端PHP登录接口编写
- 【响应式Web设计】读书笔记
- input选项点后面的字就能选中
- x210 Uboot SD卡启动过程记录
- 【高并发编程】再谈同步、异步、阻塞、非阻塞
- 爬取豆瓣影评TOP250Demo
- 如何为你的代码选择一个开源协议
- NPY and shot (三分求峰值)
- C语言基础
- struts2改springmvc过程中问题及解决办法记录
- 新创建对象直接触发fullGC问题
- HotSpot的算法实现
- 欢迎使用CSDN-markdown编辑器
- JAVA 攻城狮 第十四天