黑盒子 发表于 2020-8-27 21:26:16

python爬虫 文件写入问题

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))
      
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:45:14

本帖最后由 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)你的代码还有其他可以优化的地方,不过还是交给你自己练习吧。
页: [1]
查看完整版本: python爬虫 文件写入问题