鱼C论坛

 找回密码
 立即注册
查看: 1454|回复: 1

[已解决]python爬虫 文件写入问题

[复制链接]
发表于 2020-8-27 21:26:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import urllib.request
  2. import re
  3. import os

  4. def url_open(url):
  5.     #添加头文件
  6.     req = urllib.request.Request(url)
  7.     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')

  8.     #访问网址
  9.     response = urllib.request.urlopen(req)
  10.     html = response.read()

  11.     return html
  12.    
  13. def get_url(url):
  14.     html = url_open(url).decode('utf-8')
  15.     #获取电影地址
  16.     a = r'<a class="stui-vodlist__thumb lazyload" href="([^"]+\.html)"'
  17.     mov_addrs = re.findall(a, html)
  18.     #获取电影名称
  19.     b = r'<a class="stui-vodlist__thumb lazyload" href="[^"]+\.html" title="([^"]+)"'
  20.     mov_title = re.findall(b, html)

  21.     #电影名与网址对应
  22.     mov_dict = dict(zip(mov_title, mov_addrs))
  23.     return mov_dict

  24. #保存到文档中
  25. def save_url(folder, mov_dict):
  26.     for each in mov_dict:
  27.         with open('movies.txt', 'a') as f:
  28.             f.write('%s  ' % each)
  29.             url = 'https://www.4480qpg.net/'
  30.             f.write('%s\n' % (url + mov_dict[each]))
  31.         
  32. def download_movs(folder='mov'):
  33.     #创建文件夹
  34.     os.mkdir(folder)
  35.     #保存文件夹
  36.     os.chdir(folder)

  37.     url = 'https://www.4480qpg.net/'

  38.     #获取电影地址
  39.     mov_url = get_url(url)

  40.     #保存到指定文件夹
  41.     save_url(folder, mov_url)

  42. if __name__ == '__main__':
  43.     download_movs()
复制代码


自己写的一个小爬虫,爬的是4480青苹果影院https://www.4480qpg.net/
#保存到文档中
这一步,怎么把电影名称和电影地址直接同时(直接字典不用分开)写入TXT文档中呢,还是说像我那样写也还不错,有没有更好的写入方法呢,求教
还有就是,比如爬取网址后缀为.html的,是不是一般方法爬不了呢,求教求解释
最佳答案
2020-8-28 09:45:14
本帖最后由 suchocolate 于 2020-8-28 09:49 编辑

1)第一个问题:
  1. url = 'https://www.4480qpg.net/'   # 变量赋值一次即可
  2. with open('movies.txt', 'a') as f:   # 文件打开一次即可
  3.     for key,value in mov_dict.items():    # items()可以同时取key和value。
  4.         movie_url = url + value
  5.         f.write('%s  %s\n' % (key, movie_url))

复制代码


2)第二个问题:页面主要由HTML(主题框架),Javascript(网页行为),css组成(网页样式)组成,光看url是html无法判断网页能不能直接爬取,需要根据实际情况分析。
有的网站设置加密,有的网站要求登录,有的网站数据需要发起ajax。这个4480网站我看没有过多使用ajax,应该可以直接爬取。

3)你的代码还有其他可以优化的地方,不过还是交给你自己练习吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-28 09:45:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2020-8-28 09:49 编辑

1)第一个问题:
  1. url = 'https://www.4480qpg.net/'   # 变量赋值一次即可
  2. with open('movies.txt', 'a') as f:   # 文件打开一次即可
  3.     for key,value in mov_dict.items():    # items()可以同时取key和value。
  4.         movie_url = url + value
  5.         f.write('%s  %s\n' % (key, movie_url))

复制代码


2)第二个问题:页面主要由HTML(主题框架),Javascript(网页行为),css组成(网页样式)组成,光看url是html无法判断网页能不能直接爬取,需要根据实际情况分析。
有的网站设置加密,有的网站要求登录,有的网站数据需要发起ajax。这个4480网站我看没有过多使用ajax,应该可以直接爬取。

3)你的代码还有其他可以优化的地方,不过还是交给你自己练习吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表