三步:模拟计算器对服务器发起request请求→接受服务器端的response并提取数据→存储数据
四步:构建url列表→循环遍历url列表→提取数据→存储数据
注:URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址,和计算机的文件路径一样。
html各个标签的意义,鼠标右键‘检查’或F12可查看网页构造
需要查询指定内容时:在目标内容上点击右键->检查->再点击右键->copy->copy selector
target = soup.select("#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-of-type(1)")#电影名称
#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1) 复制的某一电影上午名称
#li:nth-child(1)表示每页第一个,去掉nth-child(1)就表示该页所有的;span:nth-child(1)修改为span:nth-of-type(1)
安装第三方库requests(版本Python 3.7),通过这个库可以用python向指定的url发送请求,请求有多种方式,常有的是get和post两种,get请求用于向服务器获取数据,post请求用于向服务器提交表单。
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。推荐使用Beautiful Soup 4, 移植到BS4。
具体例子:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
} #headers是请求头,Chorme浏览器的headers
def URL_list():#构建URL列表
urls = []
#根据我们观察到的规律进行构建
for i in range(0,250,25):
url = 'https://movie.douban.com/top250?start=' + str(i) + '&filter='
urls.append(url)
return urls
def get_data(url):
res = requests.get(url,headers = headers)#发起请求
soup = BeautifulSoup(res.text,'lxml')#使用BeautifulSoup的解析库解析
return soup
def parse_data(soup,data):
target = soup.select("#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-of-type(1)")#电影名称
#content > div > div.article > ol > li:nth-child(1) > div > div.info > div.hd > a > span:nth-child(1) 复制的某一电影上午名称
#li:nth-child(1)表示每页第一个;span:nth-child(1)修改为span:nth-of-type(1)
for i in target:
data.append(i.get_text()) #得到文字内容,可以使用get_text()
return data
def main():
urls = URL_list()
data = []
for url in urls:
soup = get_data(url)#发起请求
parse_data(soup,data)#解析数据并存进data列表中
print("----- 豆瓣电影 Top 250 -----")
for i in range(len(data)):
print(str(i+1) + " " +"%15s"%data[i])#格式化输出
main()