使用python爬取豆瓣电影TOP250

使用python爬取豆瓣电影TOP250

①获取指定界面的html文本信息 板块

②获取排名和链接,名字:因为名字,排名和链接 同在div class='pic'下面 获取属性值的时候直接用 .a.attrs['href'] 非常方便 strip()去除前后的\t\n\f

③获取分数和评价板块 用 select['span'] 返回的是 第二个span 标签内容 xpath 1 就是1

④写入excel模块

⑤整理大的列表

⑥执行:

①获取指定界面的html文本信息 板块


②获取排名和链接,名字:因为名字,排名和链接 同在div class='pic’下面 获取属性值的时候直接用 .a.attrs[‘href’] 非常方便 strip()去除前后的\t\n\f


③获取分数和评价板块 用 select[‘span’] 返回的是 第二个span 标签内容 xpath 1 就是1

注:xpath 和bs4 的返回索引不一样


④写入excel模块


⑤整理大的列表


⑥执行:


具体代码:

import requests

from bs4 import BeautifulSoup

import csv


rank=[]

link=[]

names=[]

score=[]

assess=[]

aList=[]

def getHMLText(url):

try:


    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'

    }

    r=requests.get(url,timeout=30,headers=headers)

    r.raise_for_status()

    r.encoding = r.apparent_encoding

    return r.text

except Exception as e:

    print("产生的异常是",e)  #e.status_code 状态码

def getContent(Html):

soup = BeautifulSoup(Html,"html.parser")

for li in soup.select(".grid_view li"):

for item in li.findall('div',class='pic'):

rank.append(item.text.strip()) #排名

link.append(item.a.attrs['href'])

names.append(item.a.img.attrs['alt'])


def getScoreAndassess(Html):

soup = BeautifulSoup(Html, "html.parser")

for li in soup.select(".grid_view li"):

for info in li.findall('div', class='info'):

for bd in info.findall('div',class='bd'):

score.append(bd.div.select('span')[1].text)

assess.append(bd.div.select('span')[3].text)

#print(bd.div.select('span')[3].text)


def saveListCSV(fileName,aList):

try:

with open(fileName,'w',newline='')as fp:

writer = csv.writer(fp)

writer.writerow(["排名", "电影名称", "评分", "评价数","URL"])

for item in aList:

writer.writerow(item)

print('{0}保存成功!共{1}条记录'.format(fileName,len(aList)))

except IOError as err:

print(fileName,'文件创建错误:',err)


def allLsit(aList):

for i in range(len(rank)):

aList.append([rank[i],names[i],score[i],assess[i],link[i]])

return aList


if name=="main":

for i in range(1, 11):

url = "https://www.svezta.com" + str((int(i) - 1) * 25) + "&filter="

Html= getHMLText(url)

getContent(Html)

getScoreAndassess(Html)

aList=allLsit(aList)

#print(aList)

data=aList[1125:]

saveListCSV('./movie.csv',data)


请使用浏览器的分享功能分享到微信等