天天看点

Python爬虫之豆瓣电影TOP250

Python爬虫之豆瓣电影TOP250

话不多说先上代码:

`import requests

import bs4

import os

import string

import mysql.connector

def getHTMLText(url):

print(url)

try:

r=requests.get(url,timeout=30)

r.raise_for_status()

r.encoding =“utf-8”

return r.text

except:

return""

def fillUnlivList(soup):

datas=soup.find_all(“div”,{“class”:“item”})

for data in datas:

name=data.find(“span”,{“class”:“title”})

name=nme.string

name=str(name)

score=data.find(“span”,{“class”:“rating_num”})

score=a.string

score=str(score)

introduction=data.find(“span”,{“class”:“inq”})

introduction=idea.string

introduction=str(idea)

mydb = mysql.connector.connect(

host="localhost",
    user="root",
    passwd="",
    database="runoob_db")
    mycursor=mydb.cursor()
    sql = "INSERT INTO sites (name, score, introduction) VALUES (%s, %s,%s)"
    val=(name,score,introduction)
    mycursor.execute(sql, val)
    mydb.commit()
    print(mycursor.rowcount, "记录插入成功。")
           

def main():

url=“https://movie.douban.com/top250?start=”

print(“正在爬取豆瓣电影TOP250”)

for i in range(0,9):

n=i*25

print(“第”+str(i+1)+“页”)

url_i=url+str(n)+"&filter="

html=getHTMLText(url_i)

soup=bs4.BeautifulSoup(html, “html.parser”)

fillUnlivList(soup)

print(“爬取完成”)

main()

`首先我们需要先把几个需要的包导入。这里就不写怎么导了。

第一步我们先定义获取网页代码的函数

def getHTMLText(url):

print(url)

try:

r=requests.get(url,timeout=30)

r.raise_for_status()#获取失败时报错

r.encoding =“utf-8”#设置编码格式是UTF-8

return r.text

except:

return""

目标网页:https://movie.douban.com/top250?start=

这是第一页的网址

Python爬虫之豆瓣电影TOP250

这是第二页的网址

Python爬虫之豆瓣电影TOP250

根据我们的观察可以发现第一页与第二页的网址只有start=后面的不同,再根据我们的统计,第一页有25部电影推荐。所以我们可以得出结论:我们需要爬取下一页的内容时我们只需要改变start=后面的数值。

所以我们的分页代码部分就可以写出

Python爬虫之豆瓣电影TOP250

开始获取自己想要的内容:每一部电影都在一个li

Python爬虫之豆瓣电影TOP250

电影名字在一个span

Python爬虫之豆瓣电影TOP250

因为我们只要第一个所以只用find找到第一个

评分和介绍与名字差不多

Python爬虫之豆瓣电影TOP250
Python爬虫之豆瓣电影TOP250

datas=soup.find_all(“div”,{“class”:“item”})#找到所有电影的DIV

for data in datas:

name=data.find(“span”,{“class”:“title”})#找到名字的SPAN

name=nme.string

name=str(name)#因为我们获取的name不是String类型,而存入MYSQL必须是String所以需要转换

score=data.find(“span”,{“class”:“rating_num”})

score=a.string

score=str(score)

introduction=data.find(“span”,{“class”:“inq”})

introduction=idea.string

introduction=str(idea)

接下来开始存入数据库:

1.创建数据库,创建表,

Python爬虫之豆瓣电影TOP250

字符集一定要是utf8。

2.连接数据库

mydb = mysql.connector.connect(

host="localhost",
    user="root",
    passwd="",#;我没有密码所以没写
    database="runoob_db")#数据库名字
           

3.插入数据

mycursor=mydb.cursor()

sql = “INSERT INTO sites (name, score, introduction) VALUES (%s, %s,%s)”

val=(name,score,introduction)

mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, “记录插入成功。”)

完成后的效果:

Python爬虫之豆瓣电影TOP250