需求分析:
爬取豆瓣电影网站上的正在上映的电影相关信息。
步骤:
1.将目标网站上的页面抓取下来
2.将抓取下来的数据根据一定的规则进行提取
import requests from lxml import etree #1.将目标网站上的页面抓取下来 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36', 'Referer': 'https://movie.douban.com/' } url= 'https://movie.douban.com/cinema/nowplaying/beijing/' response = requests.get(url,headers=headers) #print(response) text = response.text#返回的是经过解码后的字符串,str类型 #print(text) # text = response.content.decode('utf-8')#返回的是原生字符串,bytes类型,若目标网页不标准,则用这个 # print(text) #2.将抓取下来的数据根据一定的规则进行提取 html = etree.HTML(text) ul = html.xpath("//ul[@class='lists']")[0] #print(ul) 结果出现了两个对象,不对 # for ul in ul: # print(etree.tostring(ul,encoding='utf-8').decode('utf-8')) 查看这两个是什么原来即将上映和现在上映两个都用到了相同的 #class属性,我们需要的是正在上映,故再ul前面加一个【0】,只获得列表的第一个 lis = ul.xpath("./li")#获取ul下面的所有li属性 movies = [] #创建一个movies列表来储存提取到的信息 for li in lis: #print(etree.tostring(li, encoding='utf-8').decode('utf-8')) title = li.xpath('@data-title')[0] #print(title) score = li.xpath('@data-score')[0] duration = li.xpath('@data-duration')[0] region = li.xpath('@data-region')[0] director = li.xpath('@data-director')[0] actors = li.xpath('@data-actors')[0] thumbnail = li.xpath(".//img/@src")[0] movie = { 'title': title, 'score': score, 'duration': duration, 'region': region, 'director': director, 'actors': actors, 'thumbnail': thumbnail } movies.append(movie) print(movies)
结果:
。。。。