很穷 2022-04-13 22:21 采纳率: 100%
浏览 77
已结题

请问这个代码每一步具体怎么解释呢


import requests
import re
import json
import time
from requests.exceptions import RequestException

def get_one_page(url):
    try:
        headers = {
             'accept': 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    }
        re = requests.get(url, headers =headers)
        if re.status_code ==200:
            return re.text
        return '页面无反应'
    except RequestException:
        return 'Request出现异常错误'
def parse_one_page(html):
    pattern=re.compile('<div.*?class="pic">.*?>(.*?)</em>.*?src="(.*?)".*?class="hd".*?'
                     'href="(.*?)".*?class="title">(.*?)</span>.*?class="bd">.*?导演:(.*?)&nbsp;&nbsp;&nbsp;'
                         '(.*?)<br>(.*?)&nbsp;/&nbsp;(.*?)&nbsp;'
                         '/&nbsp;(.*?)</p>''.*?class="star">.*?average">(.*?)</span>.*?<span.*?property'
                         '.*?<span>(.*?)</span>.*?class="inq">(.*?)</span>',re.S)
    items=re.findall(pattern,html)
    for item in items:
        yield{
            '电影排名:':item[0],
              '电影图片链接':item[1],
              '电影详细内容链接:':item[2],
              '电影名称:':item[3],
              '导演:':item[4],
              '':item[5],
              '上映日期:':item[6],
              '国家:':item[7],
              '类型:':item[8],
              '电影评分:':item[9],
              '评价人数:':item[10],
              '简介:':item[11]
              }
def write_to_file(content):
    with open('D:\\daxue\\daerxia\\dashujucaiji\\zuoye\\作业1\\result(2).txt','a',encoding='utf-8')as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')
def main(offset):
     url='https://movie.douban.com/top250?start='+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(25):
        main(offset=i*25)
        time.sleep(1)
  • 写回答

1条回答 默认 最新

  • 貮叁 2022-04-13 22:52
    关注
    # 必要的第三方库
    import requests
    import re
    import json
    import time
    from requests.exceptions import RequestException
    # 获取某一页内容的函数 
    def get_one_page(url):
        # 尝试获取内容
        try:
            # 爬虫请求头,每个电脑不一样
            headers = {
                 'accept': 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        }
            # 根据网站,请求头获取内容
            re = requests.get(url, headers =headers)
            # 获取成功,返回页面内容信息
            if re.status_code ==200:
                return re.text
            # 获取不成功,返回'页面无反应'
            return '页面无反应'
        # 尝试获取内容出现异常,类型网站404
        except RequestException:
            return 'Request出现异常错误'
    
    # 解析页面内容的信息    
    def parse_one_page(html):
        # 利用正则表达式获取特定信息
        pattern=re.compile('<div.*?class="pic">.*?>(.*?)</em>.*?src="(.*?)".*?class="hd".*?'
                         'href="(.*?)".*?class="title">(.*?)</span>.*?class="bd">.*?导演:(.*?)&nbsp;&nbsp;&nbsp;'
                             '(.*?)<br>(.*?)&nbsp;/&nbsp;(.*?)&nbsp;'
                             '/&nbsp;(.*?)</p>''.*?class="star">.*?average">(.*?)</span>.*?<span.*?property'
                             '.*?<span>(.*?)</span>.*?class="inq">(.*?)</span>',re.S)
        # 查找所有符合正则表达式的信息,形成迭代器
        items=re.findall(pattern,html)
        # 循环迭代器内容
        for item in items:
            # 每一次循环中要获取的信息
            yield{
                '电影排名:':item[0],
                  '电影图片链接':item[1],
                  '电影详细内容链接:':item[2],
                  '电影名称:':item[3],
                  '导演:':item[4],
                  '':item[5],
                  '上映日期:':item[6],
                  '国家:':item[7],
                  '类型:':item[8],
                  '电影评分:':item[9],
                  '评价人数:':item[10],
                  '简介:':item[11]
                  }
    # 将内容写入文件中
    def write_to_file(content):
        with open('D:\\daxue\\daerxia\\dashujucaiji\\zuoye\\作业1\\result(2).txt','a',encoding='utf-8')as f:
            f.write(json.dumps(content,ensure_ascii=False)+'\n')
    # 主函数,
    def main(offset):
        # 网站
         url='https://movie.douban.com/top250?start='+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(25):
            main(offset=i*25)
            # 休眠,预防反爬虫
            time.sleep(1)
    
    

    如有用请采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月13日
  • 已采纳回答 4月13日
  • 赞助了问题酬金10元 4月13日
  • 赞助了问题酬金15元 4月13日
  • 展开全部

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。