当前位置: 首页 > 后端技术 > Python

Python爬虫实战,requests+re模块,Python实现爬取豆瓣电影《魔女2》

时间:2023-03-26 12:01:01 Python

前言经过几个月的静修,今天给大家带来使用Python爬虫抓取豆瓣电影《魔女2》影评,废话不多说。爬取了6月和7月25日的视频数据,开开心心开发工具Python版本:3.6.4相关模块:requests模块json模块re模块os模块pandas模块time模块以及Python自带的一些模块。环境设置安装Python并添加到环境变量中,pip安装需要的相关模块。思路分析本文使用爬取豆瓣电影《魔女2》影评,并讲解如何爬取豆瓣电影《魔女2》评论!前期准备1.获取页面内容#抓取页面urldouban_url='https://movie.douban.com/subject/34832354/comments?start=40&limit=20&status=P&sort=new_score'#requestssendrequestget_response=requests.get(douban_url)#将返回的响应码转为文本(整个网页)get_data=get_response.text2.分析页面内容,得到我们想要的内容。在浏览器中打开我们要爬取的页面按F12进入开发者工具可以查看我们想要的数据在哪里?这里我们只需要评论人+评论3.使用re模块解析数据defget_nextUrl(html):"""获取下一页的url"""try:#查找下一页的urlurl=html.find('a','next').attrs['href']#print(url)next_start=re.search(r'[0-9]\d{0,5}',url).group(0)print("已经到了"+str(next_start)+"请稍等\n")next_url="https://movie.douban.com/subject/34832354/comments?percent_type="\"&start={}&limit=20&status=P&sort=new_score&comments_only=1&ck=Cuyu".format(next_start)#print(next_url)returnnext_urlexcept:print("结束了~")运行结果4.代码实现defget_html(url):headers=Agent_info()try:r=requests.get(url=url,headers=headers,timeout=30)r.encoding=r.apparent_encodingstatus=r.status_code#爬虫的状态datas=json.loads(r.text)["html"]str_html="{}".format(datas)html=BeautifulSoup(str_html,"html.parser")print("爬虫状态码:"+str(status))#print(type(html))returnhtmlexceptExceptionase:print("数据爬取失败!")print(e)defetl_data(html):"""提取我们想要的数据"""comments=html.find_all('div','comment-item')#print(comments[0])datas=[]forspanincomments:#短评论的时间publishedtimes=span.find('span','comment-time').attrs['title']#usernamename=span.find('a').attrs["title"]#用户评分星级try:level=跨度。找到('跨度','rating').attrs['class'][0][-2:]if(level=='10'):level="onestar"elif(level=='20'):level="twostar"elif(level=='30'):level="三星级"elif(level=='40'):level="四星级"elif(level=='50'):level="五星级"除了e:level="NoComments"content=span.find('span','short').string.strip()content=re.sub(r'\n','',content)love_point=span.find('span','vote-count').string.strip()arr=[times,name,level,content,love_point]datas.append(arr)df=pd.DataFrame(datas)df.columns=["time","user","starrating","shortcomment","numberofsupport"]#print(arr)returndf#Codetest2022.7.28无异常,100多个赞,更新爬虫豆瓣阅读Top250效果展示