成天看后端他们在那搞爬虫,最近不忙,我也来试试,就爬取豆瓣电影的Top250列表吧,Google啥的反作弊机制太成熟,不适合新人上手。
看了一些资料需要安装几个必要的库,如requests
和BeautifulSoup
…
以下是实现步骤和代码:
步骤:
- 安装依赖库 :首先确保安装了所需的库。可以使用pip进行安装。我的Mbp自带Python2.7,这就省略了一个安装Python的步骤。
1 2
| pip install requests pip install beautifulsoup4
|
编写爬虫代码 :用Python编写爬虫,抓取豆瓣Top250的电影信息。豆瓣Top250网页使用了分页,所以还需要处理多个页面。
处理反爬虫机制 :豆瓣网站有一定的反爬虫措施,可以通过设置User-Agent等方式来模拟浏览器请求。
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| import requests from bs4 import BeautifulSoup import time import csv def get_page(url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" } response = requests.get(url, headers=headers) return response.text def parse_page(html): soup = BeautifulSoup(html, 'html.parser') movies = [] for item in soup.find_all('div', class_='item'): movie = {} title = item.find('span', class_='title') movie['title'] = title.text if title else 'N/A' rating = item.find('span', class_='rating_num') movie['rating'] = rating.text if rating else 'N/A' num_ratings = item.find('div', class_='star').find_all('span')[-1] movie['num_ratings'] = num_ratings.text if num_ratings else 'N/A' movie['link'] = item.find('a')['href'] movies.append(movie) return movies def save_to_csv(movies, filename='douban_top250.csv'): keys = movies[0].keys() with open(filename, mode='w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=keys) writer.writeheader() writer.writerows(movies) def main(): base_url = "https://movie.douban.com/top250?start=" all_movies = [] for i in range(0, 250, 25): url = base_url + str(i) print(f"正在爬取第{i//25 + 1}页...") html = get_page(url) movies = parse_page(html) all_movies.extend(movies) time.sleep(2) save_to_csv(all_movies) print("爬取完毕,数据已保存到douban_top250.csv") if __name__ == "__main__": main()
|
注释:
get_page(url)
:该函数发送一个HTTP GET请求到豆瓣Top250页面,返回页面的HTML内容。
parse_page(html)
:该函数使用BeautifulSoup解析页面内容,提取电影名称、评分、评价人数和链接等信息,并将其存储在字典中。返回一个电影字典的列表。
save_to_csv(movies, filename)
:该函数将电影数据保存到CSV文件中,文件名为douban_top250.csv
。
main()
:这是爬虫的主函数,负责循环爬取豆瓣Top250页面的内容并保存。每次请求后,程序暂停2秒,避免被封。