爬虫实战之豆瓣电影


所需包:bs4,openpyxl

上代码:

def getData(baseurl):
    findLink=re.compile(r'<a href="(.*?)">')#找到影片详情链接
    findImgSrc=re.compile(r'<img.*src="(.*?)"',re.S)#找到影片图片
    findTitle=re.compile(r'<span class="title">(.*)</span>')#找到片名
    #找到评分
    findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
    #找到评价人数
    findJudge=re.compile(r'<span>(\d*)人评价</span>')
    #找到概况
    findInq=re.compile(r'<span class="inq">(.*)</span>')
    #找到影片相关内容:导演,主演,年份,地区,类别
    findBd=re.compile(r'<p class="">(.*?)</p>',re.S)
    #去掉无关内容
    remove=re.compile(r'                            |\n|</br>|\.*')
    datalist=[]
for i in range(0,10):
    url=baseurl+str(i*25)
    html=askURL(url)
    soup = BeautifulSoup(html, "html.parser")
    for item in soup.find_all('div',class_='item'):#找到每一个影片项
        data=[]
        item=str(item)#转换成字符串
        # 影片详情链接
        link=re.findall(findLink,item)[0]
        data.append(link)#添加详情链接  
        imgSrc=re.findall(findImgSrc,item)[0]
        data.append(imgSrc)#添加图片链接
        titles=re.findall(findTitle,item)
        #片名可能只有一个中文名,没有外国名
        if(len(titles)==2):
            ctitle=titles[0]
            data.append(ctitle)#添加中文片名
            otitle=titles[1].replace("/","")#去掉无关符号
            data.append(otitle)#添加外国片名
        else:
            data.append(titles[0])#添加中文片名
            data.append(' ')#留空

        rating=re.findall(findRating,item)[0]
        data.append(rating)#添加评分
        judgeNum=re.findall(findJudge,item)[0]
        data.append(judgeNum)#添加评论人数
        inq=re.findall(findInq,item)
        
        #可能没有概况
        if len(inq)!=0:
            inq=inq[0].replace("。","")#去掉句号
            data.append(inq)#添加概况
        else:
            data.append(' ')#留空
        bd=re.findall(findBd,item)[0]
        bd=re.sub(remove,"",bd)
        bd=re.sub('<br(\s+)?\/?>(\s+)?'," ",bd) #去掉<br >
        bd=re.sub('/', " ",bd)#替换/
        data.append(bd.strip())
        datalist.append(data)
        
time.sleep(5)
return datalist

def saveData(datalist,savepath):
book=openpyxl.Workbook()
sheet = book.create_sheet(“豆瓣电影Top250”)
#sheet=book.add_sheet(‘豆瓣电影Top250’,cell_overwrite_ok=True)
col=(‘电影详情链接’,‘图片链接’,‘影片中文名’,‘影片外国名’, ‘评分’,‘评价数’,‘概况’,‘相关信息’)

sheet.append(col)  #添加列头


for i in range(0,250):
data=datalist[i]
for j in range(0,8):
sheet.cell(row = (i+2),column = (j+1),value = data[j])

#openpyxl中的单元格计数从1开始, 加上第一行是列头, 要多跳一个
#openpyxl中的计数和Excel内的计数方式一致, 但和常规编程从0开始的方式相左

book.save(savepath) #保存

文章作者: 远方客
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 远方客 !
评论
 上一篇
深度学习之初步入门 深度学习之初步入门
部分概念及专有名词 成本函数:个衡量模型准确率的指标,衡量依据为此模型估计X与Y间关系的能力。(来衡量AI输出与实际输出(历史数据)之间的差异,0为最好的) 降低方法: 1.梯度下降 一种求函数最小值的方法。通过每次数据集迭代之后优化模型的
2020-02-04 远方客
下一篇 
微信聊天机器人使用介绍 微信聊天机器人使用介绍
这是我github第一个认真做的一个项目,想想还有些小激动!废话不多说,介绍一下我的第一次吧! 微信聊天机器人: 依赖包: pip3 install chatterbot pip3 install chatterbot-corpus
2020-02-03
  目录