zoukankan      html  css  js  c++  java
  • 第一个爬虫经历----豆瓣电影top250(经典案例)

          因为要学习数据分析,需要从网上爬取数据,所以开始学习爬虫,使用python进行爬虫,有好几种模拟发送请求的方法,最基础的是使用urllib.request模块(python自带,无需再下载),第二是requests模块(第三方库,需要pip install requests),第三是直接使用scaper模块(第三方库,需要下载)。

          本次开发使用的工具是jupyter notebook,使用到的模块主要有requests(模拟http请求,详情请看http://2.python-requests.org/zh_CN/latest/user/quickstart.html),BeautifulSoup(处理请求的数据,以dom的形式进行处理,详细查看https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/),pandas(将处理后的数据存储为DataFrame,如果想详细了解此库可以查看https://www.cnblogs.com/lvpengbo/p/10851096.html),re(正则表达式库 https://docs.python.org/zh-cn/3/library/re.html)。

        具体代码如下:

    import requests
    import pandas as pd
    import re
    from bs4 import BeautifulSoup
    url='https://movie.douban.com/top250?start={}&filter='
    headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
    movie_list=[]
    movie_rank=[]
    movie_score=[]
    people_num=[]
    movie_year=[]
    county_list=[]
    director_list=[]
    quote_list=[]
    for i in range(10):
        start=i*25
        request_url=url.format(start)
        response=requests.get(request_url,headers=headers)
        data=response.content.decode('utf-8')
        soup=BeautifulSoup(data,'html.parser')
        all_item_divs=soup.find_all(class_='item')
        for item in all_item_divs:
            movie_list.append(item.find('span').get_text())
            movie_rank.append(item.find('em').get_text())
            movie_score.append(item.find('span',class_='rating_num').get_text())
            num=item.find('div',class_='star').contents[7].get_text()
            people_num.append(int(re.findall('d+',num)[0]))
            br_value=item.find('p').get_text()
            movie_year.append(re.findall('d+',br_value)[0].strip())
            director=list(filter(None,br_value.split('/')[0].split(':')[1].split(' ')))[0]
            director_list.append(director)
            county_list.append(br_value.split('/')[2].strip())
            if item.find('span',class_='inq')==None:
                quote_list.append('')
            else:
                quote_list.append(item.find('span',class_='inq').get_text()) 
    df=pd.DataFrame(
        {'排名':movie_rank,
         '电影名称':movie_list,
         '上映日期':movie_year,
         '国家':county_list,
          '导演':director_list,
         '评分':movie_score,
         '评论人数':people_num,
        '经典台词':quote_list})
    df.to_csv('豆瓣250.csv')

     数据集结果:国家这列有问题,字符串切割的问题,主演和电影类型也是因为字符串切割问题没有获取到

        

        

         

  • 相关阅读:
    CLRS2e读书笔记—Chapter10
    CLRS2e读书笔记—Chapter6
    CLRS2e读书笔记—Chapter34 & Appendix A,B
    CLRS2e读书笔记—Chapter8
    CLRS2e读书笔记—Chapter5 & Appendix C
    CLRS2e读书笔记—Chapter7
    Haskell学习笔记<三>
    屏幕一直亮的问题
    对CCLabelTTF进行自动换行,显示打字效果
    XCODE 4.2打包发布
  • 原文地址:https://www.cnblogs.com/hobelee/p/12494268.html
Copyright © 2011-2022 走看看