相关视频——Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析


找到一个div,在div里面翻找你要的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup #网页解析
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据

#正则表达式
#影片详情链接
findLink = re.compile(r'<a href=''(.*?)''>') #创建正则表达式对象,表示规则(字符串的模式)
#影片片名
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)#re.S让换行符包含在字符中
#影片名
findTitle = re.compile(r'<span class="title">(.*)</span>')


def main():
#1.爬取网页
baseurl = "https://movie.douban.com/top250?start="
datalist = getData(baseurl)

#爬取网页
def getData(baseurl):
for i in range(0,1):#前25个
url = baseurl + str(i*25)
html = askURL(url) #保存获取到的网页源码
# 2.逐一解析数据
soup = BeautifulSoup(html,"html.parser")#html解析器
# div这个东西,名字属性是item,_表示属性值
for item in soup.find_all('div',class_="item"):#在一个一个的div class=item里面找
data = [] #保存一部电影的所有信息
item = str(item)#转换成字符串

# re库用来通过正则表达式查找指定的字符串
#根据正则表达式匹配对象,0表示第一个
#正则表达式,要筛选的字符串
link = re.findall(findLink,item)[0]#拿到链接
data.append(link)
imgSrc = re.findall(findImgSrc,item)[0]
data.append(imgSrc)
titles = re.findall(findTitle,item)
if(len(titles)==2):#如果有两个名字
ctitle = titles[0]#添加中文名
data.append(ctitle)
otitle = titles[1].replace("/","")#去掉/
else:
data.append(titles[0])
data.append(' ')#留空——匹配格式
print(data)

#得到指定一个URL的网页内容
def askURL(url):
#模拟浏览器头部信息,向豆瓣服务器发送消息
head = {
#注意空格
"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 96.0.4664.110Safari / 537.36"
} #用户代练,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器,本质上就是告诉浏览器,我们可以接收什么水平的文件内容
request = urllib.request.Request(url,headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
#print(html)
return html
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason )

#这里作为程序入口
if __name__ == "__main__": #当前程序执行时
main()