解释代码,说明爬虫实现过程:# -- coding:utf8 -- import pymysql import requests import re import pandas as pd from bs4 import BeautifulSoup def get_movies(start): url = "https://movie.douban.com/top250?start=%d&filter=" % start lists = [] headers = { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"} html = requests.get(url,headers=headers) soup = BeautifulSoup(html.content, "html.parser") items = soup.find("ol", class_="grid_view").find_all("li") for i in items: movie = {} movie["rank"] = i.find("em").text movie["link"] = i.find("div","pic").find("a").get("href") movie["mdirecter"]=re.findall(re.compile(r'<p class="">(.*?)</p>',re.S),str(i))[0].replace("...<br/>","").replace("\n ","") movie["name"] = i.find("span", "title").text movie["score"] = i.find("span", "rating_num").text movie["quote"] = i.find("span", "inq").text if(i.find("span", "inq")) else "" lists.append(movie) return lists if name == "main": db = pymysql.connect(host="localhost",user="root",password="123456",db="maoyan",charset="utf8",port = 3306) cursor = db.cursor() cursor.execute("DROP TABLE IF EXISTS movies") createTab = """CREATE TABLE movies( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, link VARCHAR(50) NOT NULL, score VARCHAR(4) NOT NULL, descr VARCHAR(50), directer VARCHAR(100), timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP )""" cursor.execute(createTab) #采集到的数据循环插入数据中 start = 0 while (start < 250): lists = get_movies(start) for i in lists: sql = "INSERT INTO movies(name,link,score,descr,directer) VALUES(%s,%s,%s,%s,%s)" try: cursor.execute(sql, (i["name"], i["link"] , i["score"], i["quote"],i["mdirecter"])) db.commit() print(i["name"]+"...成功插入到数据库中") except: db.rollback() start += 25 db.close() cursor = db.cursor() conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='maoyan', charset='utf8mb4') cursor = conn.cursor() #输出评分top10 sql = "select * from movies limit 10" db = pd.read_sql(sql, conn) df = db.sort_values(by="score", ascending=False) print(df[['name', 'score']])
时间: 2023-07-19 09:51:07 浏览: 111
这段代码是一个简单的Python爬虫程序,用于爬取豆瓣电影Top250的数据,并将数据存储到MySQL数据库中。程序使用了第三方库requests和BeautifulSoup,其中requests用于向目标网站发送HTTP请求,BeautifulSoup用于解析HTML页面内容。程序主要分为两个部分,第一部分是get_movies函数,用于从豆瓣电影Top250页面中获取电影信息,包括电影名称、电影链接、评分、电影描述和导演等信息,并将这些信息存储到列表中返回。第二部分是主函数,主要用于将获取到的电影信息插入到MySQL数据库中,并输出评分Top10的电影信息。
具体实现过程如下:
1. 导入需要的库,包括pymysql、requests、re、pandas和BeautifulSoup。
2. 定义get_movies函数,该函数使用requests库向豆瓣电影Top250页面发送HTTP请求,然后使用BeautifulSoup解析HTML页面内容,获取电影信息,并将这些信息存储到列表中返回。
3. 在主函数中,使用pymysql库连接MySQL数据库,并定义一个游标对象cursor,用于操作数据库。
4. 创建movies表,用于存储豆瓣电影Top250的数据。
5. 采集数据并插入到数据库中,主要是使用get_movies函数获取电影信息,然后使用INSERT语句将这些信息插入到movies表中。
6. 输出评分Top10的电影信息,主要是使用SELECT语句从movies表中查询数据,并使用pandas库进行排序和输出。
最后,程序关闭数据库连接,完成数据采集和存储的任务。
阅读全文