# 一、xpath过滤标签练习
# 学完视频将阳光电影网首页导航栏前9个菜单url抓取,输出结果为可以正常访问的url, 并过滤掉"经典影片"的菜单url
#
# 二、循环内请求解析
# 对第一题解析出来的url进行请求,解析出每个菜单的分页总数,每个菜单的id,并构造出全部的菜单分页请求url,全部存进一个url_list变量,url_list变量为列表
# 比如:
# 最新电影菜单下共有165个分页,构造出165个url 存进url_list
# 国内影片菜单下共有93个页面,构造出93个url 存进url_list
#整个网站的层次: main_menu => page => item => source
import requests
from lxml import etree
def get_html(url):
headers=''
req=requests.get(url)
# print(type(req))
ret=req.status_code
if ret!=200 :
print('获取主菜单失败,返回错误:'+str(ret))
return ({})
req.encoding='gb2312'
html=req.text
return(html)
def get_main_menus(url):
html=get_html(url)
# print(html)
selector=etree.HTML(html)
main_menus=selector.xpath('//div[@class="contain"]/ul/li[position()<=9]/a')
main_menus_dict={}
for main_menu in main_menus :
text=main_menu.xpath('text()')[0]
if text=='经典电影': pass
if len(text)>=1 :
href = url + main_menu.xpath('@href')[0]
# print(text,href)
main_menus_dict.update({text:href})
else:
pass
return(main_menus_dict)
def get_items(main_menus_dict):
url_list=[]
# main_menus_dict={}
for menu_name in main_menus_dict.keys() :
menu_url=main_menus_dict.get(menu_name)
html_one_menu = get_html(menu_url)
# print(html_one_menu)
selector_one_menu=etree.HTML(html_one_menu)
# // *[ @ id = "header"] / div / div[3] / div[3] / div[2] / div[2] / div[2] / div / select / option[2]
pages=selector_one_menu.xpath('//select/option[starts-with(@value,"list")]')
print(menu_name,'小计'+str(len(pages))+'页:')
if len(pages)>=1 :
for page in pages :
page_url=menu_url.split('index.html')[0] + page.xpath('@value')[0]
print(page_url)
url_list.append(page_url)
return(url_list)
if __name__ == '__main__' :
url = 'http://www.ygdy8.com'
main_menu_dict=get_main_menus(url)
# print(main_menu_dict)
print('-------------第1题完成-----------------')
url_list=[] #全部电影页面的列表
url_list=get_items(main_menu_dict)
print('共计'+str(len(url_list))+'页')
print('-------------第2题完成-----------------')
网友评论