会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133811个问题

代码:

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


class TelephoneConverter(BaseConverter):
    regex = r"1[345789]/d{9}"


app.url_map.converters['tel'] = TelephoneConverter


@app.route('telephone/<tel:pnum>')
def my_telephone(pnum):
    return '您请求过来的电话号码值为:%s' % pnum


if __name__ == '__main__':
    app.run()

报错:

FLASK_APP = app.py

FLASK_ENV = development

FLASK_DEBUG = 0

In folder H:/python_exec/自定义URL

H:\python_virtualenv\flask_env\Scripts\python.exe -m flask run

 * Serving Flask app "app.py"

 * Environment: development

 * Debug mode: off

Traceback (most recent call last):

  File "h:\python37\lib\runpy.py", line 193, in _run_module_as_main

    "__main__", mod_spec)

  File "h:\python37\lib\runpy.py", line 85, in _run_code

    exec(code, run_globals)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\__main__.py", line 15, in <module>

    main(as_module=True)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 967, in main

    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 586, in main

    return super(FlaskGroup, self).main(*args, **kwargs)

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\core.py", line 782, in main

    rv = self.invoke(ctx)

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\core.py", line 1259, in invoke

    return _process_result(sub_ctx.command.invoke(sub_ctx))

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\core.py", line 1066, in invoke

    return ctx.invoke(self.callback, **ctx.params)

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\core.py", line 610, in invoke

    return callback(*args, **kwargs)

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\decorators.py", line 73, in new_func

    return ctx.invoke(f, obj, *args, **kwargs)

  File "H:\python_virtualenv\flask_env\lib\site-packages\click\core.py", line 610, in invoke

    return callback(*args, **kwargs)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 848, in run_command

    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 305, in __init__

    self._load_unlocked()

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 330, in _load_unlocked

    self._app = rv = self.loader()

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 388, in load_app

    app = locate_app(self, import_name, name)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\cli.py", line 240, in locate_app

    __import__(module_name)

  File "H:\python_exec\自定义URL\app.py", line 19, in <module>

    @app.route('telephone/<tel:pnum>')

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\app.py", line 1315, in decorator

    self.add_url_rule(rule, endpoint, f, **options)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\app.py", line 98, in wrapper_func

    return f(self, *args, **kwargs)

  File "H:\python_virtualenv\flask_env\lib\site-packages\flask\app.py", line 1275, in add_url_rule

    rule = self.url_rule_class(rule, methods=methods, **options)

  File "H:\python_virtualenv\flask_env\lib\site-packages\werkzeug\routing.py", line 666, in __init__

    raise ValueError("urls must start with a leading slash")

ValueError: urls must start with a leading slash


Process finished with exit code 1


环境:

    pycharm2020.1

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 30438楼
Python 全系列/第六阶段:数据库与AI协同技术实战/MySQL数据库的使用 30439楼
Python 全系列/第十二阶段:Python_Django3框架/Django初级 30441楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 30444楼
Python 全系列/第一阶段:AI驱动的Python编程/编程基本概念 30445楼
JAVA 全系列/第九阶段:SpringBoot与MybatisPlus/Spring Boot旧 30446楼
JAVA 全系列/第十四阶段:分布式文件存储与数据缓存/FastDFS 30447楼
WEB前端全系列/第九阶段:HTML5新特性模块/(旧)H5新特性 30448楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/面向对象详解和JVM底层内存分析 30449楼

之前用request爬取猫眼电影时,

由于猫眼把电影信息变成了动态获取,因此无法直接用源代码爬取。

现在通过selenium直接点进电影信息时发现,

即使首页面加了防检测,但只能在当前页面生效,打开的新页面window.navigator.wevdrive===True,依旧无法获取电影信息,因此仍无法用selenium获取多条电影信息。

因此通过request爬取电影目录,selenium爬取电影信息,总算是成功爬取了电影信息,目前猫眼评分转了码问题仍未解决

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
import requests
from fake_useragent import UserAgent
from lxml import etree
from queue import Queue
from threading import Thread


def get_film_list(page):
    film_list = []
    for i in range(page):
        url = f'https://www.maoyan.com/films/?showType=3&offset={30*i}'
        headers = {'User-Agent': UserAgent().chrome}
        resp = requests.get(url, headers = headers)
        html = etree.HTML(resp.text)
        films = html.xpath('//dd/div[@title]/a/@href')
        for film in films:
            film_list.append(film)
        sleep(1)
    return film_list


def get_film_data(film):
    url = f'https://www.maoyan.com{film}'
    options = webdriver.ChromeOptions()
    # 设置无头
    options.add_argument('--headless')
    # 防检测1
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)

    service = Service(executable_path='./tools/chromedriver')
    chrome = webdriver.Chrome(service=service, options=options)
    chrome.implicitly_wait(2)

    # 防检测2
    chrome.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => false
            })
          """
    })

    chrome.get(url)
    name = chrome.find_element(By.XPATH, '//h1[@class="name"]').text
    type_ = [i.text for i in chrome.find_elements(By.XPATH, '//a[@class="text-link"]')]
    chrome.find_element(By.XPATH, '//div[@class="tab-title "]').click()
    actors = []
    for i in chrome.find_elements(By.XPATH, '//li[@class="celebrity actor"]/div/a'):
        if i.text and i.text not in actors:
            actors.append(i.text.strip())

    info = {'电影名': name, '类型': type_, '主演': actors}
    return info


def create_quere(list):
    q = Queue()
    for i in list:
        q.put(i)
    return q


class MyThread(Thread):
    def __init__(self, q):
        Thread.__init__(self)
        self.__q = q

    def run(self) -> None:
        while not self.__q.empty():
            film = self.__q.get()
            film_info = get_film_data(film)
            print(film_info)


if __name__ == '__main__':
    film_list = get_film_list(1)
    q = create_quere(film_list)
    for i in range(3):
        t = MyThread(q)
        t.start()


Python 全系列/第十六阶段:Python 爬虫开发/爬虫基础(旧) 30450楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637