网络爬虫——豆瓣电影排行榜数据抓取(初级)
程序员文章站
2022-07-04 10:27:16
...
网络爬虫——豆瓣电影排行榜数据抓取(初级)
目标网址:
豆瓣电影排行:https://movie.douban.com/top250?start=
目标数据描述:(1)排名(2)电影名称
任务明细:
(1)使用requests库实现该网站网页源代码的获取;
(2)使用BeautifulSoup对获取的源代码进行解析,并成功找到目标数据所在的特定标签,进行网页结构的解析;
(3)定义函数,将获取的目标数据打印输出,有能力的同学可以试着将结果写入文件中。
(4)使用框架式结构,通过参数传递实现整个特定数据的爬取。
可以选择定义全局列表,将目标数据获取后添加到列表中,同时,注意观察分页时url的变化,以便获取整个的排行榜数据。建议通过for循环传递变化参数实现。
下一阶段,目标数据增加导演、主演、评价人数等信息,将尽可能多的数据抓取保存。
源码
import requests
from bs4 import BeautifulSoup
import bs4
def getHtmlText(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69'
}
try:
result = requests.get(url,headers=headers,timeout=30)
result.raise_for_status()
result.encoding = result.apparent_encoding
result=(result.text.replace('<br>','')).replace('<br/>','')
return result
except:
return ""
def findUniverse(ulist , html):
soup = BeautifulSoup(html,"html.parser")
list = [0,0]
for li in soup.find(attrs=['class','grid_view']).children:
if isinstance(li ,bs4.element.Tag):
list[0] = li.find('em').string
list[1] = li.find(attrs=['class','title']).string
ulist.append([list[0],list[1]])
def printUniverse(ulist):
tplt = '{0:^10}\t{1:^10}'
print(tplt.format("排名","电影名称",chr(12288)))
for i in range(len(ulist)):
u = ulist[i]
print(tplt.format(u[0],u[1],chr(12288)))
def main():
ulist = []
url = 'https://movie.douban.com/top250?start='
html = getHtmlText(url)
findUniverse(ulist,html)
printUniverse(ulist)
main()
输出如下: