鱼C论坛

 找回密码
 立即注册
查看: 1213|回复: 8

[已解决]爬虫一些不懂的对方求教

[复制链接]
发表于 2020-3-23 00:06:10 | 显示全部楼层 |阅读模式

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

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

x
import re
import requests
import json
import time
from requests.exceptions import RequestException
def get_one_page(url):
        try:
                headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
                response = requests.get(url,headers=headers)
                print(response.status_code)
                if response.status_code == 200:
                        return response.text
                return None
        except RequestException:
                return None


def parse_one_page(html):
        pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
        + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
        + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>',re.S)
        items = re.findall(pattern,html)
        print(items)
        for item in items:
                yield{
                        'index':item[0],
                        'image':item[1],
                        'title':item[2],
                        'actor':item[3].strip()[3:], #if len(item[3]) > 3 else '',
                        'time':item[4].strip()[5:], #if len(item[4]) >5 else '',
                        'score':item[5] + item[6]
                }

def write_to_file(content):
        with open('result.txt','a',encoding='utf-8') as f:
                #print(type(json.dumps(Conntent)))
                f.write(json.dumps(content,ensure_ascii=False)+'\n')
                f.close()

def main(offset):
        url = 'http://maoyan.com/board/4?offset=' + str(offset)
        html = get_one_page(url)
        for item in parse_one_page(html):
                print(item)
                write_to_file(item)

if __name__ == '__main__':
        for i in range(10):
                main(offset=i * 10)
                time.sleep(1)

粗体部分为我不解的地方,求教各位大佬
我不明白的地方是

content是什么?它是什么参数?上下文中都没有,在哪里继承或者说是传递过来的>? 程序为什么会被执行,程序是至上而下执行的,可是这个 write_to_file函数没有被调用啊

还有一个是最下面的  什么是if __name__ == '__main__':
双下划线代表什么?为什么要这样写,直接写main()可不可以?
最佳答案
2020-3-23 11:54:49
nanrenne 发表于 2020-3-23 11:47
我尝试输入这些
>>> import os   导入os
>>> os.__name__   os的名字


解压缩 demo.zip 运行 mian.py,然后看看源代码你就懂了:

demo.zip (535 Bytes, 下载次数: 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 07:41:18 | 显示全部楼层
1,看main的最后一行
2,小甲鱼老师讲过的,防止别的程序调用main(如果你导入了这个程序)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 09:41:07 | 显示全部楼层
1. content 是一个参数,是之后传进去的

2. 是防止别人导入这个模块自动调用 main() 函数:
>>> import os
>>> os.__name__
'os'
>>> __name__
'__main__'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 11:43:36 | 显示全部楼层
qiuyouzhi 发表于 2020-3-23 07:41
1,看main的最后一行
2,小甲鱼老师讲过的,防止别的程序调用main(如果你导入了这个程序)

感谢,那么(content)我可不可以写成别的,比如 write_to_file(x1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 11:44:43 | 显示全部楼层
nanrenne 发表于 2020-3-23 11:43
感谢,那么(content)我可不可以写成别的,比如 write_to_file(x1)

可以啊,只要把content改成x1就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-23 11:47:46 | 显示全部楼层
本帖最后由 nanrenne 于 2020-3-23 11:51 编辑
一个账号 发表于 2020-3-23 09:41
1. content 是一个参数,是之后传进去的

2. 是防止别人导入这个模块自动调用 main() 函数:


我尝试输入这些
>>> import os   导入os
>>> os.__name__   os的名字
'os'   就是os
>>> __name__  名字的名字
'__main__'   就是main

是我这样理解吗

如果我导入的是re模块,其实也是一样的

百度了下 说的是 如果你的文件是从外部导入的,则外部函数内容不会被执行
如果你的文件是在内部的,则代码块会被执行

那么按照这个意思,其实我主题的那些代码完全也可以不需要if __name__ == '__main__':
直接用main() 也可以直接调用main入口函数运行整个程序的把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 11:54:49 | 显示全部楼层    本楼为最佳答案   
nanrenne 发表于 2020-3-23 11:47
我尝试输入这些
>>> import os   导入os
>>> os.__name__   os的名字


解压缩 demo.zip 运行 mian.py,然后看看源代码你就懂了:

demo.zip (535 Bytes, 下载次数: 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 13:04:09 | 显示全部楼层
1. content 是一个参数

def main(offset):
        url = 'http://maoyan.com/board/4?offset=' + str(offset)
        html = get_one_page(url)
        for item in parse_one_page(html):
                print(item)
                write_to_file(item)

2. https://www.cnblogs.com/yaohong/p/8660209.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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