import requests import re import csv url = 'https://movie.douban.com/top250' headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.4031 SLBChan/105', } response = requests.get(url) pattern = r'<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>' results = re.findall(pattern, response.text, re.S) with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['电影名称', '评分']) for result in results: writer.writerow(result) print('豆瓣电影top250爬取完成,已保存至douban_top250.csv文件中')
时间: 2024-03-31 14:33:25 浏览: 64
这段代码是一个爬取豆瓣电影top250并将结果保存至CSV文件的Python程序。程序使用requests库向豆瓣电影top250网页发送HTTP请求,并使用正则表达式从网页源代码中提取出电影名称和评分信息。然后,程序使用csv库将结果写入CSV文件中。
具体实现过程如下:
1. 导入requests、re和csv库。
2. 指定豆瓣电影top250的URL和请求头信息。
3. 使用requests库向豆瓣电影top250网页发送HTTP请求,并获取响应内容。
4. 使用正则表达式从网页源代码中提取出所有电影名称和评分信息。
5. 创建一个CSV文件,指定文件名、编码和列名。
6. 使用csv库将列名写入CSV文件中。
7. 遍历所有电影名称和评分信息,将它们写入CSV文件中。
8. 关闭CSV文件。
9. 输出提示信息,表示爬取和保存结果成功。
需要注意的是,这段代码仅供学习和参考,如果您想要爬取豆瓣电影top250,请确保遵守相关法律法规和网站规定,不要进行商业用途和侵犯他人权益的行为。
相关问题
import requests import re # import csv from bs4 import BeautifulSoup url = "https://movie.douban.com/top250" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" } resp = requests.get(url, headers = headers) page_content = resp.text #图片 resp = BeautifulSoup(page_content,"html.parser") pict = resp.find("ol",attrs={"class": "grid_view"}) imgs = pict.find_all("img") print(imgs) for i in imgs: src = i.get("src") print(src) name = src.split("/")[-1] img_c = requests.get(src) with open(f"douban-imgs/{name}",mode="wb") as f: f.write(img_c.content)讲解一下这段代码
这段代码是一个Python爬虫程序,用于从豆瓣电影Top250页面中提取电影海报的图片链接,并下载这些图片到本地。下面是代码的具体讲解:
1. 导入所需的Python库:
```python
import requests
import re
from bs4 import BeautifulSoup
```
其中,requests库用于发送HTTP请求,re库用于正则表达式匹配,BeautifulSoup库用于解析HTML页面。
2. 设置请求头:
```python
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57"
}
```
这里设置了一个User-Agent请求头,用于伪装成浏览器发送请求,避免被网站反爬虫机制封禁。
3. 发送HTTP请求并获取页面内容:
```python
url = "https://movie.douban.com/top250"
resp = requests.get(url, headers = headers)
page_content = resp.text
```
这里使用requests库发送GET请求,获取豆瓣电影Top250页面的HTML源代码。由于该页面的编码为UTF-8,因此使用text属性获取响应内容。
4. 解析HTML页面:
```python
resp = BeautifulSoup(page_content,"html.parser")
pict = resp.find("ol",attrs={"class": "grid_view"})
imgs = pict.find_all("img")
```
这里使用BeautifulSoup库解析HTML页面,找到包含电影海报图片的`<ol>`标签,并获取其中所有的`<img>`标签。find()方法用于查找第一个匹配的标签,find_all()方法用于查找所有匹配的标签。
5. 提取图片链接并下载图片:
```python
for i in imgs:
src = i.get("src")
name = src.split("/")[-1]
img_c = requests.get(src)
with open(f"douban-imgs/{name}",mode="wb") as f:
f.write(img_c.content)
```
这里遍历所有的`<img>`标签,提取其中的`src`属性,即图片链接。然后根据链接发送HTTP请求,获取图片的二进制数据,并将数据写入文件中。这里使用了Python的with语句,可以自动管理文件的打开和关闭。图片保存在本地的"douban-imgs/"目录下,文件名为图片链接的最后一部分。
代码编写:使用到的函数: 使用requests库发送get请求,获取豆瓣电影TOP250的网页源代码。 使用beautifulsoup库对网页源代码进行解析,并提取出电影名称、评分、评价人数,年份,国家和主要类型。 使用到的文件存储方式:本地csv文件 爬取的网址:https://movie.douban.com/top250 代码展示:
以下是使用Python代码实现爬取豆瓣电影TOP250并保存至本地csv文件的示例:
```python
import requests
from bs4 import BeautifulSoup
import csv
# 发送get请求获取网页源代码
url = 'https://movie.douban.com/top250'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
html = response.text
# 解析网页源代码并提取电影信息
soup = BeautifulSoup(html, 'html.parser')
movie_list = soup.find('ol', class_='grid_view').find_all('li')
# 保存电影信息至本地csv文件
with open('top250_movies.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['电影名称', '评分', '评价人数', '年份', '国家', '主要类型'])
for movie in movie_list:
title = movie.find('span', class_='title').text
rating = movie.find('span', class_='rating_num').text
rating_count = movie.find('div', class_='star').find_all('span')[3].text[:-3]
other_info = movie.find('div', class_='bd').p.text
year = other_info.split('/')[0].strip()
country = other_info.split('/')[1].strip()
genres = other_info.split('/')[2].strip()
writer.writerow([title, rating, rating_count, year, country, genres])
```
该代码通过发送get请求获取网页源代码,并使用beautifulsoup库对网页源代码进行解析,提取出电影名称、评分、评价人数、年份、国家和主要类型等信息,并将这些信息保存至本地csv文件中。
阅读全文