豆瓣Top250电影名怎么爬
参考博文:https://www.cnblogs.com/leon507/p/7614345.html
怎么实现
因为没有系统学习过,所以只能做搬运工。看了几篇有关爬取豆瓣Top250的电影信息,这篇是最简单易懂的了,所以摘过来学习学习。但这个博主的代码只是爬了电影名,然后也没有将爬到的数据保存到本地,那我就在他的基础上加了几行代码,将数据保存到本地了。
首先爬虫三部曲?
第一,requests爬取网页的HTML信息
第二,解析HTML。解析有很多种方法>_<
第三,保存本地
翻页信息
第一页:https://movie.douban.com/top250?start=0&filter=
第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
第十页:https://movie.douban.com/top250?start=225&filter=
所以翻页规律就是 25*i (i+1)表示第几页
在网页源代码中定位需要爬取的信息
代码如下
加了一点自己的解释>_<
import requests
from bs4 import BeautifulSoup
def get_movies(): #定义一个函数来爬取数据
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
'Host': 'movie.douban.com'
}
movie_list = [] #定义一个空列表,放电影名 #定义序列
for i in range(0, 10):#遍历页数,0表示第一页
url = 'https://movie.douban.com/top250?start=' + str(i * 25) #通过循环,下载第二页,第三页
r = requests.get(url, headers=headers, timeout=10) #爬虫第一步,requests发送请求,爬取HTML信息 #timeout=10,响应时长
print(str(i + 1), "页响应状态码:", r.status_code) #显示状态码,返回200,请求成功
soup = BeautifulSoup(r.text, "lxml") #爬虫第二步,解析数据
div_list = soup.find_all('div', class_='hd') #如下图显示,电影名字在div标签之后
for each in div_list:
movie = each.a.span.text.strip() #span后的文本
movie_list.append(movie) #append(movie),在movie_list中添加movie序列
return movie_list
movies = get_movies()
print(movies)
import pandas as pd
df = pd.DataFrame(movies)
#df.to_csv('doubanTop250Movies_name.csv') 不知道为啥这个文件打开后乱码
df.to_excel('doubanTop250Movies_name.xlsx')
结果如下
总的来说就是 要查看要爬取的信息在网页源代码中是如何显示的,再根据规律写爬取的代码>_<