|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import urllib.request
- import re
- import os
- def url_open(url):
- #添加头文件
- req = urllib.request.Request(url)
- req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36')
- #访问网址
- response = urllib.request.urlopen(req)
- html = response.read()
- return html
-
- def get_url(url):
- html = url_open(url).decode('utf-8')
- #获取电影地址
- a = r'<a class="stui-vodlist__thumb lazyload" href="([^"]+\.html)"'
- mov_addrs = re.findall(a, html)
- #获取电影名称
- b = r'<a class="stui-vodlist__thumb lazyload" href="[^"]+\.html" title="([^"]+)"'
- mov_title = re.findall(b, html)
- #电影名与网址对应
- mov_dict = dict(zip(mov_title, mov_addrs))
- return mov_dict
- #保存到文档中
- def save_url(folder, mov_dict):
- for each in mov_dict:
- with open('movies.txt', 'a') as f:
- f.write('%s ' % each)
- url = 'https://www.4480qpg.net/'
- f.write('%s\n' % (url + mov_dict[each]))
-
- def download_movs(folder='mov'):
- #创建文件夹
- os.mkdir(folder)
- #保存文件夹
- os.chdir(folder)
- url = 'https://www.4480qpg.net/'
- #获取电影地址
- mov_url = get_url(url)
- #保存到指定文件夹
- save_url(folder, mov_url)
- if __name__ == '__main__':
- download_movs()
复制代码
自己写的一个小爬虫,爬的是4480青苹果影院https://www.4480qpg.net/
#保存到文档中
这一步,怎么把电影名称和电影地址直接同时(直接字典不用分开)写入TXT文档中呢,还是说像我那样写也还不错,有没有更好的写入方法呢,求教
还有就是,比如爬取网址后缀为.html的,是不是一般方法爬不了呢,求教求解释
本帖最后由 suchocolate 于 2020-8-28 09:49 编辑
1)第一个问题: - url = 'https://www.4480qpg.net/' # 变量赋值一次即可
- with open('movies.txt', 'a') as f: # 文件打开一次即可
- for key,value in mov_dict.items(): # items()可以同时取key和value。
- movie_url = url + value
- f.write('%s %s\n' % (key, movie_url))
复制代码
2)第二个问题:页面主要由HTML(主题框架),Javascript(网页行为),css组成(网页样式)组成,光看url是html无法判断网页能不能直接爬取,需要根据实际情况分析。
有的网站设置加密,有的网站要求登录,有的网站数据需要发起ajax。这个4480网站我看没有过多使用ajax,应该可以直接爬取。
3)你的代码还有其他可以优化的地方,不过还是交给你自己练习吧。
|
|