|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 bigplumtree 于 2019-8-16 17:06 编辑
跟着小甲鱼学习1个月,最后写了个爬虫
并且运行成功! ,非常高兴
代码返回的结果是类似这样的
- 黑衣人:全球追缉 HD1280高清国语|原声中字版 https://www.80s.la/movie/26330 thunder://QUFodHRwOi8vYW5uaW5nLmx1YW5uaWFvLXp1aWRhLmNvbS8xOTA3L0hZ5Lq677yaUVHov73nvIkuSEQxMjgw6auY5riF5Lit5a2X6Z+p54mILm1wNFpa
- 大清十二刑 HD1280高清国语中字版 https://www.80s.la/movie/27920 磁力链接暂时没有
- 博多之子 HD1280高清中英双字版 https://www.80s.la/movie/27902 thunder://QUFodHRwOi8veHVubGVpLnhpYXphaS16dWlkYS5jb20vMTkwOC/ljZrlpJrkuYvlrZAuSEQxMjgw6auY5riF5Lit6Iux5Y+M5a2X54mILm1wNFpa
复制代码
以下为代码
- import requests
- from bs4 import BeautifulSoup
- import time
- '''爬取的网站是80s电影网,可以打开这个网站看下的他的结构'''
- # 这三个url是电影栏目的url,
- # 为了以后能在其他栏目下爬取,
- # 所以给他拆开了
- url_before = 'https://www.80s.la'
- url_type = '/movie'
- url_after = '/list/-----p'
- # 只做了浏览器头的伪装,没有使用代理
- header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
- # 获取电影栏目下,每页的所有电影名称,清晰度和电影详细页地址
- # 传入的值为电影栏目下,每一页的url
- # 以字典的形式返回{'电影名称':['清晰度','详细页']}
- def get_movie_list(moive_list_url):
- # 定义这个函数返回的字典
- movie_dict = {}
- # 请求这个网址,并使用BeautifulSoup解析
- req = requests.get(moive_list_url,headers=header)
- html = req.text
- html_bs = BeautifulSoup(html,'lxml')
- # 这个url,每页展示的所有电影都在ul标签下
- # 限定的条件可以使用浏览器找出来
- # 返回内容是li标签的大集合
- # 每页都会有5*5=25个电影,也就是25个li标签
- label_li = html_bs.find('ul',class_="me1 clearfix")
- # 根据li标签的大集合,找出每个li标签,以列表形式返回
- movie_list = label_li.find_all('li')
- # 遍历每个li标签,提取出需要的内容,可以用浏览器看下li标签的结构
- for per_li in movie_list:
- type = per_li.find_all('span')[1].string.strip()
- url = url_before + per_li.a.attrs['href']
- name = per_li.a.attrs['title']
- # 将组合的内容存入字典中
- movie_dict[name] = [type, url]
- return movie_dict
- # 获取电影详细页面内的迅雷磁力链
- # 传入每一个详细页的url
- # 返回该页面内电影的磁力链
- def get_movie_info(movie_info_url):
- # 请求详细页,并使用BeautifulSoup解析
- req = requests.get(movie_info_url,headers=header)
- html = req.text
- html_bs = BeautifulSoup(html,'lxml')
- # 获取详细页面内的磁力链,可以打开浏览器查看,磁力链的位置,找到这个标签
- xunlei = html_bs.find('a', onclick="return OnDownloadClick_Simple(this,2,4)")
- # 有的电影没有下载资源,上面会返回None,这里做个判断
- # 有磁力链的话就返回磁力链,没有就返回自定义字符串
- if xunlei == None:
- cili = '磁力链接暂时没有'
- else:
- cili = xunlei.attrs['href']
- return cili
- print('--------------准备获取网站信息--------------')
- # 这里是准备爬取的页面,可以打开电影栏目页面,看下一共有多少页
- for page in range(5,10):
- # 组装url
- url = url_before + url_type + url_after + str(page)
- print('正在获取 ' + url + ' 页面信息,请稍后....')
- # 获取该页面下所有的电影资源,字典类型
- # {'电影名称':['清晰度','详细页']}
- movie_list_per_page = get_movie_list(url)
- # 获取该页面下所有的电影名称,也就是字典的键
- allmovie_names = movie_list_per_page.keys()
- # 打开文件,用来存这些爬到的内容
- # 在这里做打开,而不在写入文件的时候做,
- # 我的想法是,下面是一个循环,每循环一次就打开关闭一次,太浪费资源
- # 不知道我的想法对不对
- with open('E:\\80s1.txt','a+') as file:
- # 遍历电影名称
- for movie_name in allmovie_names:
- # 以电影名称获取电影类型
- movie_type = movie_list_per_page[movie_name][0]
- # 以电影名称获取电影详细页url
- movie_url = movie_list_per_page[movie_name][1]
- # 传入电影详细页url获取磁力链
- cili = get_movie_info(movie_url)
- # 组装要写入文件的信息
- text = movie_name + ' ' + movie_type + ' ' + movie_url + ' ' + cili + '\n'
- # 写入文件,每次写入都直接写入,不放在缓冲区
- file.write(text)
- file.flush()
- print(movie_name+'写入完成')
- # 以防打开网页的速度太快,被服务器封掉ip
- # 所以每完成一次就,休息2秒
- time.sleep(2)
复制代码 |
|