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=
这是第一页的网址
这是第二页的网址
根据我们的观察可以发现第一页与第二页的网址只有start=后面的不同,再根据我们的统计,第一页有25部电影推荐。所以我们可以得出结论:我们需要爬取下一页的内容时我们只需要改变start=后面的数值。
所以我们的分页代码部分就可以写出
开始获取自己想要的内容:每一部电影都在一个li
电影名字在一个span
因为我们只要第一个所以只用find找到第一个
评分和介绍与名字差不多
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.创建数据库,创建表,
字符集一定要是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, “记录插入成功。”)
完成后的效果: