python爬虫初学(2)——爬取豆瓣250电影信息,BeautifulSoup4库

一、与python爬虫初学(1)的区别只是改用BeautifulSoup4库

二、代码

#使用requests爬取网页
#使用bs4实现数据解析
#借助pandas将数据导入到excel
import requests
from lxml import etree
from bs4 import BeautifulSoup
import pprint
import json
#构造分页数字列表
page_indexs=range(0,250,25)
#下载所有页面的html,用于后续数据处理
def download_all_htmls():
    htmls=[]
    for index in range(0,10):
        url='https://movie.douban.com/top250?start='+str(index*25)

        heads={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203'}
        print('craw html:',url)
        r=requests.get(url,headers=heads)
        if r.status_code!=200:
            raise Exception('error')
        htmls=etree.HTML(r.text)  #r.text就是html的数据
        lis=htmls.xpath('//*[@id="content"]/div/div[1]/ol/li')
        for li in lis:
            title=li.xpath('./div/div[2]/div[1]/a/span[1]/text()')

        htmls.append(r.text)
    return htmls
htmls=download_all_htmls()
#解析html得到数据
def parse_single_html(html):
    '''解析单个html得到数据'''
    soup=BeautifulSoup(html,'html.parser')
    article_items=(
        soup.find('div',class_='article')
            .find('ol',class_='grid_view').find('li')

    )
    datas=[]
    for article_item in article_items:
        rank=soup.find('div',class_='article').find('ol',class_='grid_view').find('li').find('div', class_='item').find('div',class_='pic').find('em').get_text()  #排名
        info=soup.find('div',class_='article').find('ol',class_='grid_view').find('li').find('div', class_='item').find('div',class_='info')
        title=info.find('div',class_='hd').find('span',class_='title').get_text()
        stars=(
            info.find('div',class_='bd')
                .find('div',class_='star')
                .find_all('span')
        )
        rating_star=stars[0]['class'][0]  #class属性有多个 取第0个
        rating_num=stars[1].get_text()
        comments=stars[3].get_text()
        datas.append({
            'rank':rank,
            'title':title,
            'rating_star':rating_star.replace('rating','').replace('-t',''),  #把评分的前缀和后缀去掉
            'comments':comments.replace('人评价','')
        })
    return datas
all_datas=[]
for i in htmls:
    all_datas.extend(parse_single_html(i))
movie=pd.DataFrame(all_datas)
movie.to_excel(r'D:\movie.xlsx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值