参考资料:
B站:《正则提取》
# -*- codeing = utf-8 -*-
# @Time :6/28/2021 16:30
# @Author :何先生
# @File : spider.py
# @Software :PyCharm
#几个需要用到的库
from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作
def main():
baseurl = "https://movie.douban.com/top250?start="
datalist=getData(baseurl)
# savepath=
# 2.获取数据
# 3.保存数据
# saveData(savepath)
#01.获取影片详情页:
# findlink=re.compile(r'')#创建正则表达式,表示规则(字符串的模式)
#02.获取图片链接:
findImgSrc=re.compile(r',re.S)#re.S 让换行符包含在字符串中
#03.获取影片片面:
findTitle=re.compile(r'(.*)')
#04.获取影片评分:
findMark=re.compile(r' ')
#05.获取评分人数:
findPeopleNum=re.compile(r'(\d*)人评价')
#06.找到概况:
findSimIntro=re.compile(r'(.*)')
#07.找到影片的制作信息:
findMaker=re.compile(r'(.*)(\d.*)
',re.S)
#爬取网页的函数
def getData(baseurl):
datalist=[]
# 1.爬取网页
for i in range(0, 1): # 调用函数获取页面信息的函数,10次
url = baseurl + str(i * 25)
html = askURL(url) # 保存获取到的网页源码
#2.逐一解析数据
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="item"): # 查找符合要求的字符串,形成列表
# print(item)
data = [] # 保存一部电影的所有信息
item = str(item)
#获取影片详情页链接
# link = re.findall(findlink, item)[0] # re库用来通过正则表达式查找指定的字符串
# img=re.findall(findImgSrc, item)[0]
# title=re.findall(findTitle,item)[0]
# mark=re.findall(findMark,item)[0]
# people_num=re.findall(findPeopleNum,item)[0]
# sim_intro=re.findall(findSimIntro,item)[0]
# maker=re.findall(findMaker,item)[0]
# print(link)
# print(img)
# print(title)
# print(mark)
# print(people_num)
# print(sim_intro)
# print(maker)
return datalist
#爬取指定一个网页的函数:
def askURL(url):
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
req = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
# return html
# print(html)
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
#保存数据
def saveData(savepath):
print("save")
main()