美文网首页Python四期爬虫作业
【Python爬虫】第十五次 xpath过滤标签提取url

【Python爬虫】第十五次 xpath过滤标签提取url

作者: 徐_c90e | 来源:发表于2017-09-10 23:46 被阅读13次
    # 一、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题完成-----------------')

    相关文章

      网友评论

        本文标题:【Python爬虫】第十五次 xpath过滤标签提取url

        本文链接:https://www.haomeiwen.com/subject/escxsxtx.html