案例:抓取猫眼电影top100
要求:
- 获取电影相关信息
- 存储在mysql表单中
知识点:
- requests请求读取
- 正则表达式re解析网页
- pymysql存储网页内容
# url:http://maoyan.com/board
# 排名,海报,影名,主演,上映时间,评分
# 存储,mysql
# 模块:pymysql+requests+re(一个正则就可以把上述都可以整出来)
# 第二步:分析html结构
# 第三步:代码写入
import re
import pymysql
import requests
# (1)请求一个单页的内容
def get_one_page(url):
headers = {
"Host": "maoyan.com",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"}
response = requests.get(url, headers=headers)
return response.text
# (2)解析单页的html
def parse_one_page(html):
# 制定规则,正则表达式
#re.S可以匹配到换行符
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
items=re.findall(pattern,html)
#print(items)
# (3)处理单页的数据
for item in items:
yield {
"index":item[0],
"image":item[1],
"title":item[2],
"actor":item[3].strip()[3:],
"time":item[4].strip()[5:],
"score":item[5]+item[6]
}
# (4)保存单页的数据
def write_to_mysql(content):
#连接数据库
conn=pymysql.connect(host="localhost",user="root",passwd="8642807",db="16ban",charset="utf8")
#创建游标
cursor=conn.cursor()
index=content["index"]
image=content["image"]
title = content['title']
actor = content['actor']
time = content['time']
score = content['score']
#构建sql语句和数据源
sql="insert into maoyan values(%s,%s,%s,%s,%s,%s)"
parm=(index,image,title,actor,time,score)
#执行sql语句
cursor.execute(sql,parm)
#提交
conn.commit()
#关闭
cursor.close()
conn.close()
# (5)函数回调
def main(num):
#重构url
url = "http://maoyan.com/board/4?offset="+str(num)
html=get_one_page(url)
for i in parse_one_page(html):
print(i)
write_to_mysql(i)
# (6)分页处理
#程序入口,不能被外部调用
if __name__=="__main__":
for i in range(10):
main(i*10)