现在要爬取前七页的url
第一页:
第二页:
可以找到页码的一定规律
所以代码可以为:
def spider(): base_url="https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html" for x in range(1,8): url=base_url.format(x) print(url) if __name__=='__main__': spider()
然后把得到这些页面url解析,传到一个详情函数里,得到每个页面中电影的详情
# 电影天堂爬虫 from lxml import etree import requests BASE_DOMAIN="https://www.dytt8.net" HEADERS={ 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" } # 获取一页中的电影详情页url def get_detail_urls(url): response=requests.get(url,headers=HEADERS) text=response.text html=etree.HTML(text) detail_urls=html.xpath("//table[@class='tbspan']//a/@href") detail_urls=map(lambda url:BASE_DOMAIN+url,detail_urls) return detail_urls # 获取详情页的内容 def parse_detail_page(url): movie = {} response = requests.get(url, headers=HEADERS) text = response.content html=etree.HTML(text) try: title=html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0] movie['title']=title zooms=html.xpath("//div[@id='Zoom']")[0] image=zooms.xpath(".//img/@src")[0] movie['image']:image def parse_info(info, rule): return info.replace(rule, "").strip() infos=zooms.xpath(".//text()") for index,info in enumerate(infos): if info.startswith("◎年 代"): info=parse_info(info,"◎年 代") movie["year"]=info elif info.startswith("◎产 地"): info=parse_info(info,"◎产 地") movie["country"]=info elif info.startswith("◎类 别"): info=parse_info(info,"◎类 别") movie["category"]=info elif info.startswith("◎豆瓣评分"): info = parse_info(info, "◎豆瓣评分") movie["douban_rating"] = info elif info.startswith("◎片 长"): info = parse_info(info, "◎片 长") movie["duration"] = info elif info.startswith("◎导 演"): info = parse_info(info, "◎导 演") movie["director"] = info # 主演是一行一个人名,如果还用上面的方法,只能得到都一个人名 elif info.startswith("◎主 演"): info = parse_info(info, "◎主 演") actors = [info] # 从第二个人名开始到这个字节所有的长 for x in range(index+1,len(infos)): actor=infos[x].strip() #除去不是主演的部分 actors.append(actor) movie["actors"]=actors elif info.startswith("◎简 介"): info = parse_info(info, "◎简 介") for x in range(index+1,len(infos)): porfile=infos[x].strip() movie["porfile"] = porfile return movie except IndexError: pass # 获取前七页的url def spider(): # 要获取前七页,而且这几页的url存在一定的规律,所以在这里挖个坑 base_url="https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html" # X就代表挖的坑,前七页,所以1-8 movies=[] for x in range(1,8): # 第一个for循环,是用来控制总共有几行 url=base_url.format(x) # 把获得的前七页的url传给获得电影详情页的函数,这样就可以得到前七页中所有的电影的详情页的url detail_urls=get_detail_urls(url) for detail_url in detail_urls: # 第二个for循环 movie=parse_detail_page(detail_url) movies.append(movie) print(movies) if __name__=='__main__': spider()