会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132904个问题
JAVA 全系列/第八阶段:SpringBoot与MybatisPlus/Spring Boot旧 30331楼
JAVA 全系列/第十三阶段:分布式文件存储与数据缓存/FastDFS 30332楼
WEB前端全系列/第九阶段:HTML5新特性模块/(旧)H5新特性 30333楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 30334楼

之前用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 爬虫开发/爬虫基础(旧) 30335楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 30336楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 30337楼
JAVA 全系列/第四阶段:网页编程和设计/JavaScript语言 30339楼

2020 12 20----------

package com.bjsxt.schema;

import java.io.File;
import java.io.IOException;

import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class Test {
   public static void main(String[] args) throws SAXException {
      //(1)创建SchemaFactory工厂
      SchemaFactory sch=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
      //(2)建立验证文件对象
      File schemaFile=new File("book.xsd");
      //(3)利用SchemaFactory工厂对象,接收验证的文件对象,生成Schema对象
      Schema schema=sch.newSchema(schemaFile);
      //(4)产生对此schema的验证器
      Validator validator=schema.newValidator();
      //(5)要验证的数据(准备数据源)
      Source source=new StreamSource("book.xml");
      //(6)开始验证
      try {
         validator.validate(source);
         System.out.println("成功");
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         System.out.println("失败");
      }
   }
}
"C:\Program Files\Java\jdk1.8.0_261\bin\java.exe" "-javaagent:E:\IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50729:E:\IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=GBK -classpath "C:\Program Files\Java\jdk1.8.0_261\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_261\jre\lib\rt.jar;E:\IDEA\第三阶段\out\production\schemaProject" com.bjsxt.schema.Test
Exception in thread "main" org.xml.sax.SAXParseException; schema_reference.4: 无法读取方案文档 'file:/E:/IDEA/%E7%AC%AC%E4%B8%89%E9%98%B6%E6%AE%B5/book.xsd', 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:306)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:4207)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:4190)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument1(XSDHandler.java:2513)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2220)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:581)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:610)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:569)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:535)
	at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:269)
	at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:638)
	at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:654)
	at com.bjsxt.schema.Test.main(Test.java:21)
Caused by: java.io.FileNotFoundException: E:\IDEA\第三阶段\book.xsd (系统找不到指定的文件。)
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at java.io.FileInputStream.<init>(FileInputStream.java:93)
	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:622)
	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
	at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:583)
	at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:686)
	at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:531)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2208)
	... 8 more

Process finished with exit code 1

schemaProject.zip

$5`0832T0CDYF5[$7B[JHLW.png

运行不了..

JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 30340楼
Python 全系列/第一阶段:Python入门/编程基本概念 30341楼

''''
使用工厂模式、单例模式实现如下需求:
(1) 电脑工厂类 ComputerFactory 用于生产电脑 Computer。工厂类使用单例模式,也就是说只能有一个工厂对象。
(2) 工厂类中可以生产各种品牌的电脑:联想、华硕、神舟
(3) 各种品牌的电脑使用继承实现:
(4) 父类是 Computer 类,定义了 calculate 方法
(5) 各品牌电脑类需要重写父类的 calculate
'''
class Computer:
    __obj=None
    __init__flag=True
    def create_computer(self,brand):
        if brand=='联想':
            return Lenovo(Computer)
        if brand=='华硕':
            return Asus(Computer)
        if brand=='神舟':
            return Hasee(Computer)
        else:
            return '未知品牌,无法创建'
    def calculate(self):
        print('生产电脑')
    def __new__(cls, *args, **kwargs):
        if cls.__obj==None:
            cls.__obj=object.__init__(cls)
            return cls.__obj
    def __init__(self,brand):
        if self.__init__flag:
            print('init...')
            self.__init__flag=False

class Lenovo(Computer):
    def calculate(self):
        print('生产联想电脑')
class Asus(Computer):
    def calculate(self):
        print('生产华硕电脑')
class Hasee(Computer):
    def calculate(self):
        print('生产神舟电脑')
factory=Computer()
factory2=Computer()
x=factory.create_computer('联想')

image.png

老师,我这个代码一直报错,看了问答区感觉我代码好像没错啊

Python 全系列/第一阶段:Python入门/面向对象 30343楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 30344楼

'''测试一个经典的GUI程序的写法,用面向对象的的方式'''
from tkinter import *

from tkinter import  messagebox
class Appclation(Frame):
    """一个经典的GUI程序的写法"""
    def __init__(self,master=None):
        super().__init__(master)  # super()代表的是父类的定义而不是父类的对象
        self.master=master
        self.pack()
        self.createwidget()
        self.creatwidget2()
    def createwidget(self):
        """  创建lable对象"""
        self.labeo1=Label(self,text='百战程序员',width=10,height=2,bg="black",fg="white")
        self.labeo1.pack()
        self.labeo2=Label(self,text="赵少斯",width=10,height=2,bg='blue',fg="white",font=("黑体",30))
        self.labeo2.pack()
        self.labeo3=Label(self,text='赵少斯好帅\n王杰好丑\n王杰',borderwidth=2,justify="right",relief='solid')
        #创建一个退出按钮
        self.bton1quit=Button(self,text="点击退出",command=root.destroy)
        self.bton1quit.pack() #显示对象
    def creatwidget2(self):
        '''创建组件'''
        self.button2=Button(self)
        self.button2['text']="点击送花"
        self.button2.pack()
        self.button2['command']=self.songhua()
    def songhua(self):
        messagebox.showinfo("你好呀",'给你花')



if __name__ == '__main__':

    root=Tk()
    root.title("一个经典的Lable程序的测试")
    root.geometry("500x800+100+200")
    app=Appclation(master=root)
    root.mainloop()


老师,为啥会同时出现  怎样才能点击组件才能出现第二个


图片.gif

















































Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 30345楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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