吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1164|回复: 8
收起左侧

[讨论] 爬取豆瓣top250榜

[复制链接]
vtor 发表于 2021-11-21 11:46
vtor-python学习之路-爬取豆瓣top250榜单基本信息0.说明
在上篇帖子中提到了python中requesets库与re库等的使用
现在来实操一下,爬取豆瓣top250榜单基本信息
此贴编辑&发布于20211121日,114440秒
如有错误,欢迎指正,共同进步
视频教程网址
https://www.bilibili.com/video/BV1i54y1h75W

1.导入相关的库,这点不多说,见源码即可
2.确定要爬取的网址
这是第1个page的网址:”https://movie.douban.com/top250“
第2个page的网址:“https://movie.douban.com/top250?start=25&filter=”
第3个page的网址:“https://movie.douban.com/top250?start=50&filter=”
可以看到就是start这个变量在变化,将这个变量设置为0,刚好能访问的第1个page
那么,网址确定完成(源码内使用for in进行循环,我python基本操作基础较弱,只好用笨办法)
[Python] 纯文本查看 复制代码
start_idx = [0,25,50,75,100,125,150,175,200,225]
for i in start_idx:
	# 先确定网址与ua
# 可以格式化字符串,将变量放进字符串内
	url = f"https://movie.douban.com/top250?start={i}&filter="

3.创建ua,导入字典,不清楚的可以见上一个帖子
4.使用requests获取数据,然后关闭resp
resp = requests.get(url,headers = header)
page_text = resp.text
resp.close()
5.使用正则匹配需要的数据(重点讲解)
[Python] 纯文本查看 复制代码
	info_re = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>'
		r'.*?<div class="bd">.*?<br>(?P<year>.*?)&nbsp'
		r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
		r'.*?<span>(?P<people_num>.*?)</span>'
		,re.S)

每个电影在一个<li>.*?</li>内,然后中间按回车可以继续输入正则,
记得在正则前面输入.*?这样才能正确匹配,
python内的re模块使用(?P<group_name>)可以获得<>内的数据(不懂请见上一帖)
这里要注意年份会是“     1994”,前面有空格,需要使用tstrip()清除空格



6.打印与csv文件保存
f = open("data.csv",mode="w", encoding="utf-8",newline="")
csvwriter = csv.writer(f)
        # 输出到控制台 或者 写入到文件中
        for i in info_iter:
                print(i.group("name"),i.group("year").strip(),i.group("score"),i.group("people_num"))

                dic = i.groupdict()
                dic['year'] = dic['year'].strip()
                csvwriter.writerow(dic.values())
# 最后关闭文件
f.close()


7.附上完整代码,欢迎评论,共同进步
[Python] 纯文本查看 复制代码
# 豆瓣250排行榜
# 拿到页面源代码
# 正则提取信息

import requests
import re
import csv
start_idx = [0,25,50,75,100,125,150,175,200,225]

# 在这里打开csv文件
f = open("data.csv",mode="w", encoding="utf-8",newline="")
csvwriter = csv.writer(f)
	
for i in start_idx:
	# 先确定网址与ua
	# 可以格式化字符串,将变量放进字符串内
	url = f"https://movie.douban.com/top250?start={i}&filter="
	header = {
		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44"
	}
	resp = requests.get(url,headers = header)
	page_text = resp.text
	print(resp.url)
	# 一定要记得colse
	resp.close

	# 预先确定正则
	info_re = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>'
		r'.*?<div class="bd">.*?<br>(?P<year>.*?) '
		r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
		r'.*?<span>(?P<people_num>.*?)</span>'
		,re.S)
	# 返回含有数据的迭代器
	info_iter = info_re.finditer(page_text)
	
	# 输出到控制台 或者 写入到文件中
	for i in info_iter:
		print(i.group("name"),i.group("year").strip(),i.group("score"),i.group("people_num"))

		dic = i.groupdict()
		dic['year'] = dic['year'].strip()
		csvwriter.writerow(dic.values())
# for到此结束
# 最后关闭文件
f.close()


FSCapture_20211121_0002_需要爬取的信息_.png

打开csv可以看到爬取的信息

打开csv可以看到爬取的信息

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
wanfon + 1 + 1 谢谢@Thanks!
qiubai2022 + 1 + 1 用心讨论,共获提升!
xxsdpyz + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Soar119 发表于 2021-11-21 14:36
我爬了多次,豆瓣直接给封了ip,是不是得弄个虚拟登录和控制时间间隔的
甜萝 发表于 2021-11-21 14:41
qiubai2022 发表于 2021-11-21 15:36
 楼主| vtor 发表于 2021-11-21 16:06
Soar119 发表于 2021-11-21 14:36
我爬了多次,豆瓣直接给封了ip,是不是得弄个虚拟登录和控制时间间隔的

你说的虚拟登录之类的我不知道,毕竟我也是个小白。。
在这个项目中,重点就是正则的运用,如果被封了,这个就别做了吧
以后的项目requests获取数据之后要resp.close就行,切记啊!
 楼主| vtor 发表于 2021-11-21 16:08
paypojie 发表于 2021-11-21 14:41
y以后可能学习爬虫 这个有用

我这篇帖子更像是我的一个学习笔记,
如果想系统学习,你可以去帖子开头的那个bilibili网址一起学习
githubi 发表于 2021-11-21 22:03
你好,年份的正则表达式是不是有问题呢,我爬下来的书籍中没有年份
 楼主| vtor 发表于 2021-11-22 08:53
githubi 发表于 2021-11-21 22:03
你好,年份的正则表达式是不是有问题呢,我爬下来的书籍中没有年份

你可以按f12查看网页源代码,(截图到论坛,我会看的)
可能略有差异,反正你发到论坛,我自会帮你查看正则的~
楚子沦i 发表于 2021-11-22 09:27
Soar119 发表于 2021-11-21 14:36
我爬了多次,豆瓣直接给封了ip,是不是得弄个虚拟登录和控制时间间隔的

上代{过}{滤}理,然后就是设置一下sleep,不然你一秒看一页,谁都知道你不是人
封ip的话,要是那种可以付费的说不定买个东西就好了,也有的就是解不了了,推荐还是要用代{过}{滤}理池爬东西。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表