欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 基于python的网络爬虫实现代码

基于python的网络爬虫实现代码

2024/10/23 15:24:38 来源:https://blog.csdn.net/QQ_778132974/article/details/143060990  浏览:    关键词:基于python的网络爬虫实现代码

以下是一个基于Python的简单网络爬虫实现示例,以爬取豆瓣电影Top250的电影名称和评分为例:

  1. 安装必要的库

    • 我们需要安装requests库用于发送HTTP请求获取网页内容,BeautifulSoup库用于解析HTML页面。
    • 可以使用pip install requests beautifulsoup4命令进行安装。
  2. 导入相关库

import requests
from bs4 import BeautifulSoup
  1. 发送请求并获取页面内容
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/91.0.4472.124 Safari/537.36'}
response = requests.get(url, headers = headers)
html_content = response.text
  • 这里设置User - Agent头部信息是为了模拟浏览器访问,避免被服务器拒绝访问。
  1. 解析页面内容
soup = BeautifulSoup(html_content, 'html.parser')
movie_list = soup.find_all('div', class_='hd')
score_list = soup.find_all('span', class_='rating_num')
  • 我们通过BeautifulSoupfind_all方法来查找所有符合条件的HTML标签。这里分别查找包含电影名称的<div class="hd">标签和包含评分的<span class="rating_num">标签。
  1. 提取信息
for movie, score in zip(movie_list, score_list):movie_name = movie.a.span.textprint(f"电影名称: {movie_name}, 评分: {score.text}")
  • 通过遍历找到的电影名称标签和评分标签,提取出电影名称和评分并打印出来。

如果要进一步扩展这个爬虫:

  • 分页处理
    • 豆瓣电影Top250是分页显示的。可以通过分析页面的URL结构来实现分页爬取。例如,第二页的URL是https://movie.douban.com/top250?start = 25&filter = ,其中start参数表示从第几个电影开始显示。
    • 可以使用循环来遍历不同的页面,修改start参数的值来获取所有页面的内容。
for page in range(0, 250, 25):url = f'https://movie.douban.com/top250?start={page}&filter='# 后续的请求、解析和提取步骤与前面相同
  • 数据存储
    • 可以将爬取到的数据存储到文件或者数据库中。
    • 如果存储到CSV文件中,可以使用csv模块。
import csv
with open('douban_movies.csv', 'w', newline='', encoding='utf - 8 - sig') as csvfile:fieldnames = ['电影名称', '评分']writer = csv.DictWriter(csvfile, fieldnames = fieldnames)writer.writeheader()for movie, score in zip(movie_list, score_list):movie_name = movie.a.span.textwriter.writerow({'电影名称': movie_name, '评分': score.text})
  • 如果存储到数据库(如MySQL),需要安装mysql - connector - python库,然后进行数据库连接、创建表和插入数据等操作。
import mysql.connector
mydb = mysql.connector.connect(host = "localhost",user = "your_user",password = "your_password",database = "your_database"
)
mycursor = mydb.cursor()
mycursor.execute('CREATE TABLE IF NOT EXISTS douban_movies (movie_name VARCHAR(255), score VARCHAR(10))')
for movie, score in zip(movie_list, score_list):movie_name = movie.a.span.textsql = "INSERT INTO douban_movies (movie_name, score) VALUES (%s, %s)"val = (movie_name, score.text)mycursor.execute(sql, val)
mydb.commit()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com