파이썬 면접에서 자주 묻는 질문은 무엇입니까?

王林
풀어 주다: 2023-05-25 23:59:27
앞으로
1806명이 탐색했습니다.

Q51. args와 kwargs를 사용하는 의미를 설명해 주세요

리스트나 튜플을 전달할 때처럼 함수에 몇 개의 매개변수를 전달할지 모를 때는 *args를 사용합니다:

def func(*args):

  for i in args:

      print(i) 

func(3,2,1,4,7)

3

2

1

4

7
로그인 후 복사

전달해야 할 매개변수 수를 모릅니다. 키워드 인수를 사용할 때 **kwargs를 사용하여 키워드 인수를 수집합니다.

def func(**kwargs):

  for i in kwargs:

      print(i,kwargs[i])

func(a=1,b=2,c=7)

a.1

b.2

c.7
로그인 후 복사

Q52. Python에서 파일을 삭제하는 방법은 무엇입니까?

os.remove(파일명) 또는 os.unlink(파일명) 명령을 사용하세요.

Q53.C에서 Python으로 작성된 모듈에 접근하는 방법을 설명해주세요.

다음을 통해 C에서 Python으로 작성된 모듈에 액세스할 수 있습니다.

Module = = PyImport_ImportModule(“<modulename>”)
로그인 후 복사

Q54 Python에서 // 연산자를 사용하시겠습니까?

두 개의 피연산자를 나누는 데 사용되는 바닥 나눗셈 연산자로, 그 결과가 몫이 되고, 소수점 이하의 숫자만 표시됩니다.

예를 들어 10 // 5 = 2이고 10.0 // 5.0 = 2.0입니다.

Q55. 문자열에서 선행 공백을 제거하는 방법은 무엇인가요?

문자열의 선행 공백은 문자열에서 공백이 아닌 첫 번째 문자 앞에 나타나는 공백입니다.

우리는 문자열에서 이를 제거하기 위해 Istrip() 메소드를 사용합니다.

’ Data123 '.lstrip()

결과:

'Data123 ’

Istrip()을 호출하면 접미사 공백을 제거할 수 있습니다. rstrip() 메소드를 사용하십시오.

&#39;Data123    &#39;.rstrip()

&#39;Data123&#39;
로그인 후 복사

Q56. Python을 사용하여 피보나치 수열을 출력하는 방법은 무엇인가요?

a,b = 0, 1

  while b<100:

  print (b)

  a, b = b, a+b
로그인 후 복사

Q57. Python에서 문자열을 정수 변수로 변환하는 방법은 무엇인가요?

문자열에 숫자만 포함된 경우 int() 함수를 사용하여 정수로 변환할 수 있습니다.

int(‘22’)

변수 유형을 확인해 보겠습니다:

type(&#39;22&#39;)

<class&#39;str&#39;>

type(int(&#39;22&#39;))

<class&#39;int&#39;>
로그인 후 복사

Q58. Python에서 난수를 생성하는 방법은 무엇인가요?

난수를 생성하려면 Random 모듈에서 ran() 함수를 가져올 수 있습니다.

from random import random

random()

0.013501571090371978
로그인 후 복사

간격을 나타내기 위해 두 개의 매개변수를 사용하고 간격 내에서 임의의 정수를 반환하는 randint() 함수를 사용할 수도 있습니다.

from random import randint

randint(2,7)

4
로그인 후 복사

Q59. 문자열의 첫 글자를 대문자로 표시하는 방법은 무엇인가요?

가장 쉬운 방법은 capitalize() 메서드를 사용하는 것입니다.

&#39;daxie&#39;.capitalize()

&#39;Daxie&#39;
로그인 후 복사

Q60. 문자열의 모든 문자가 영숫자인지 확인하는 방법은 무엇입니까?

이 문제에는 isalnum() 메서드를 사용할 수 있습니다.

&#39;DATA123&#39;.isalnum()

True

&#39;DATA123!&#39;.isalnum()

False
로그인 후 복사

다른 방법도 사용할 수 있습니다:

&#39;123&#39;.isdigit()#检测字符串是否只由数字组成

True

&#39;123&#39;.isnumeric()#只针对unicode对象

True

&#39;data&#39;.islower()#是否都为小写

True

&#39;Data&#39;.isupper()#是否都为大写

False
로그인 후 복사

Q61. Python에서 연결이란 무엇인가요?

Python의 연결은 두 시퀀스를 함께 연결하는 것입니다. + 연산자를 사용하여 완료합니다.

&#39;22&#39;+&#39;33&#39;

‘2233&#39;

[1,2,3]+[4,5,6]

[1, 2,3, 4, 5, 6]

(2,3)+(4)

TypeError  Traceback (most recent call last)

<ipython-input-7-69a1660f2fc5> in <module>

----> 1 (2,3)+(4)

TypeError: can only concatenate tuple (not "int") to tuple
로그인 후 복사

(4)가 정수로 간주되므로 여기서 오류가 발생했습니다. 수정하고 다시 실행합니다.

(2,3)+(4,)

(2, 3,4)
로그인 후 복사

Q62. 재귀?

함수가 호출 중에 직접 또는 간접적으로 자신을 호출하는 것을 재귀라고 합니다. 그러나 무한 루프를 방지하려면 다음과 같은 종료 조건이 있어야 합니다.

def facto(n):

  if n==1: return 1

  return n*facto(n-1)

facto(5)

120
로그인 후 복사

Q63.

생성기는 반복을 위해 일련의 값을 생성하므로 반복 가능한 객체입니다.

for 루프 중에 다음 요소를 지속적으로 계산하고 적절한 조건에서 for 루프를 종료합니다.

우리는 값을 하나씩 "산출"하는 함수를 정의한 다음 for 루프를 사용하여 이를 반복합니다.

def squares(n):

  i=1

  while(i<=n):

      yield i**2

      i+=1

for i in squares(5):

  print(i)

1

4

9

16

25
로그인 후 복사

Q64. 반복자란 무엇인가요?

Iterator는 컬렉션 요소에 액세스하는 방법입니다.

반복자 개체는 모든 요소에 액세스할 때까지 컬렉션의 첫 번째 요소부터 액세스하기 시작합니다.

반복자는 앞으로만 갈 수 있고 뒤로 갈 수 없습니다. inter() 함수를 사용하여 반복자를 만듭니다.

odds=iter([1,2,3,4,5])

#每次想获取一个对象时,我们就调用next()函数

next (odds)

1

next (odds)

2

next (odds)

3

next (odds)

4

next (odds)

5
로그인 후 복사

Q65 제너레이터와 이터레이터의 차이점에 대해 이야기해 주세요

1) 제너레이터를 사용할 때는 함수를 생성하고, 이터레이터를 사용할 때는 내장 함수인 iter()와 next()를 사용합니다. 2) 생성기에서는 'yield'라는 키워드를 사용하여 매번 객체를 생성/반환합니다.

3) 생성기에 있는 'yield' 문 수를 사용자 정의할 수 있습니다.

Generator 로컬 변수 상태 루프가 일시 중지될 때마다 저장됩니다. 반복자는 반복할 수 있는 객체만 필요하며 지역 변수를 사용할 필요가 없습니다.

5) 클래스를 사용하여 자체 반복자를 구현할 수 있지만 생성기를 구현할 수는 없습니다.

6) 생성기는 빠르게 실행되고 간단한 구문을 갖습니다. ;

7) 반복자는 더 많은 메모리를 절약할 수 있습니다.

Q66. zip() 함수는 무엇에 사용되나요?

Python 초보자는 이 함수에 익숙하지 않을 수 있습니다. zip()은 튜플의 반복자를 반환할 수 있습니다.

list(zip([‘a’,‘b’,‘c’],[1,2,3]))

[(‘a’1), (‘b’, 2), (‘c’, 3)]

여기서 zip() 함수는 두 목록의 데이터 항목을 쌍으로 연결하고 그로부터 튜플을 생성합니다.

Q67. Python을 사용하여 현재 어떤 디렉토리에 있는지 알아내는 방법은 무엇입니까?

함수/메소드 getcwd()를 사용하여 모듈 os에서 가져올 수 있습니다.

import os

os.getcwd()

‘C:Users37410Desktop code’

Q68. 문자열 길이를 어떻게 계산하나요?

이것도 상대적으로 간단합니다. 길이를 계산하려는 문자열에서 len() 함수를 호출하면 됩니다.

len(‘Data 123’)

8

Q69. 목록에서 마지막 개체를 삭제하는 방법은 무엇인가요?

목록에서 마지막 개체 또는 obj를 제거하고 반환합니다.

list.pop(obj = list [-1])
로그인 후 복사

Q70.解释一些在Python中实现面向功能的编程的方法

有时,当我们想要遍历列表时,一些方法会派上用场。

1)filter()

过滤器允许我们根据条件逻辑过滤一些值。

list(filter(lambda x:x> 5,range(8)))

[6,7]

2)map()
로그인 후 복사

Map将函数应用于iterable中的每个元素。

list(map(lambda x:x ** 2,range(8)))

[0,1,4,9,16,25,36,49]

3)reduce()
로그인 후 복사

在我们达到单个值之前,Reduce会反复减少序列顺序。

from functools import reduce

reduce(lambda x,y:xy,[1,2,3,4,5])

-13
로그인 후 복사

Q71.编写一个Python程序来计算数字列表的总和

def list_sum(num_List):如果len(num_List)== 1:

return num_List [0]

else:

return num_List [0] + list_sum(num_List [1:])

print(list_sum([3,4,5,6,11]))

29
로그인 후 복사

Q72.编写一个Python程序来读取文件中的随机行

import random

def random_line(fname):

lines = open(fname).read().splitlines()

return random.choice(lines)

print(random_line(&#39;test.txt&#39;))
로그인 후 복사

Q73.编写一个Python程序来计算文本文件中的行数

def file_lengthy(fname):

open(fname)as f:

for i,l in enumerate(f):

pass

return i + 1

print(“file of lines:”,file_lengthy(“test.txt”))
로그인 후 복사

Q74.请写一个Python逻辑,计算一个文件中的大写字母数量

import os

os.chdir(&#39;C:\Users\lifei\Desktop&#39;)

with open(&#39;Today.txt&#39;) as today:

count=0

for i in today.read():

if i.isupper():

count+=1

print(count)
로그인 후 복사

Q75.在Python中为数值数据集编写排序算法

以下代码可用于在Python中对列表进行排序:

list = ["1", "4", "0", "6", "9"]

list = [int(i) for i in list]

list.sort()

print (list)

Django有关
로그인 후 복사

Q76.请解释或描述一下Django的架构

对于Django框架遵循MVC设计,并且有一个专有名词:MVT,

M全拼为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架;

V全拼为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpResponse;

T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html,内嵌了模板引擎

Q77.Django,Pyramid和Flask之间的差异

Flask是一个“微框架”,主要用于具有更简单要求的小型应用程序。

Pyramid适用于大型应用程序,具有灵活性,允许开发人员为他们的项目使用数据库,URL结构,模板样式等正确的工具。

Django也可以像Pyramid一样用于更大的应用程序。它包括一个ORM。

Q78.讨论Django架构

Django架构

开发人员提供模型,视图和模板,然后将其映射到URL,Django可以为用户提供服务。

Q79.解释如何在Django中设置数据库

Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统中。

如过你有数据库服务器-PostgreSQL,MySQL,Oracle,MSSQL-并且想要使用它而不是SQLite,那么使用数据库的管理工具为你的Django项目创建一个新的数据库。

无论哪种方式,在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使用它。

这是项目的settings.py文件的来源。

我们将以下代码行添加到setting.py文件中:

DATABASES ={‘default’: {‘ENGINE’: ‘django.db.backends.sqlite3’, ‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),

Q80.举例说明如何在Django中编写VIEW?

这是我们在Django中使用write一个视图的方法:

from django.http import HttpResponse

import datetime

def Current_datetime(request):

now =datetime.datetime.now()

html ="<html><body>It is now %s</body></html>"%now

return HttpResponse(html)
로그인 후 복사

返回当前日期和时间,作为HTML文档。

Q81.提到Django模板的组成部分。

模板是一个简单的文本文件。

它可以创建任何基于文本的格式,如XML,CSV,HTML等。

模板包含在评估模板时替换为值的变量和控制模板逻辑的标记(%tag%)。

Q82.在Django框架中解释会话的使用?

Django提供的会话允许您基于每个站点访问者存储和检索数据。

Django通过在客户端放置会话ID cookie并在服务器端存储所有相关数据来抽象发送和接收cookie的过程。

所以数据本身并不存储在客户端。

从安全角度来看,这很好。

Q83.列出Django中的继承样式

在Django中,有三种可能的继承样式:

抽象基类:当你只希望父类包含而你不想为每个子模型键入的信息时使用;

多表继承:对现有模型进行子类化,并且需要每个模型都有自己的数据库表。

代理模型:只想修改模型的Python级别行为,而无需更改模型的字段。

数据分析

Q84.什么是Python中的map函数?

map函数执行作为第一个参数给出的函数,该函数作为第二个参数给出的iterable的所有元素。

如果给定的函数接受多于1个参数,则给出了许多迭代。

Q85.如何在NumPy数组中获得N个最大值的索引?

我们可以使用下面的代码在NumPy数组中获得N个最大值的索引:

importnumpy as np

arr =np.array([1, 3, 2, 4, 5])

print(arr.argsort()[-3:][::-1])

4 3 1
로그인 후 복사

Q86.如何用Python/ NumPy计算百分位数?

importnumpy as np

a =np.array([1,2,3,4,5]

p =np.percentile(a, 50) #Returns 50th percentile, e.g. median

print(p)

3
로그인 후 복사

Q87.NumPy阵列在(嵌套)Python列表中提供了哪些优势?

1)Python的列表是高效的通用容器。

它们支持(相当)有效的插入,删除,追加和连接,Python的列表推导使它们易于构造和操作。

2)有一定的局限性

它们不支持元素化加法和乘法等“向量化”操作,可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须在操作时执行类型调度代码在每个元素上。

3)NumPy不仅效率更高,也更方便

많은 벡터 및 행렬 연산을 수행하므로 때로는 불필요한 작업을 피할 수 있습니다.

4) NumPy 배열이 더 빠릅니다.

NumPy, FFT, 컨볼루션, 빠른 검색, 기본 통계, 선형 대수, 히스토그램 등을 내장하여 사용할 수 있습니다.

Q88. 데코레이터 사용법을 설명하세요.

Python의 데코레이터는 함수나 클래스의 코드를 수정하거나 삽입하는 데 사용됩니다.

데코레이터를 사용하면 원래 코드가 실행되기 전이나 후에 코드 조각이 실행되도록 클래스 또는 함수 메서드 호출을 래핑할 수 있습니다.

데코레이터는 권한 확인, 메소드에 전달된 매개변수 수정 또는 추적, 특정 메소드에 대한 호출 기록 등에 사용될 수 있습니다.

Q89 NumPy와 SciPy의 차이점은 무엇인가요?

이상적인 세상에서 NumPy에는 인덱싱, 정렬, 재구성 및 기본 요소 기능과 같은 가장 기본적인 배열 데이터 유형 및 작업만 포함되어 있습니다.

2) 모든 숫자 코드는 SciPy에 있습니다. 그럼에도 불구하고 NumPy는 이전 버전과의 호환성이라는 목표를 여전히 유지하고 있으며 이전 버전에서 지원되는 모든 기능을 유지하려고 노력하고 있습니다.

따라서 SciPy에 더 적합하게 속하지만 NumPy에는 여전히 일부 선형 대수 함수가 포함되어 있습니다. 그럼에도 불구하고 SciPy에는 선형 대수학 모듈의 더 포괄적인 버전과 다른 어떤 것보다 많은 다른 수치 알고리즘이 포함되어 있습니다.

과학적인 계산을 위해 Python을 사용한다면 NumPy와 SciPy를 설치하는 것이 좋습니다. 대부분의 새로운 기능은 NumPy가 아닌 SciPy에 속합니다.

Q90. NumPy/SciPy를 사용하여 3D 플롯/시각화를 만드는 방법은 무엇입니까?

2D 플로팅과 마찬가지로 3D 그래픽도 NumPy 및 SciPy의 범위를 벗어나지만 2D 케이스와 마찬가지로 NumPy와 통합되는 패키지가 있습니다.

Matplotlib는 mplot3d 하위 패키지에서 기본 3D 플로팅을 제공하는 반면 Mayavi는 강력한 VTK 엔진을 사용하여 다양한 고품질 3D 시각화 기능을 제공합니다.

크롤러와 무서운 프레임워크

Q91. scrapy와 scrapy-redis의 차이점은 무엇인가요? Redis 데이터베이스를 선택하는 이유는 무엇입니까?

Scrapy는 크롤링 효율성이 매우 높고 사용자 정의 수준이 높은 Python 크롤러 프레임워크이지만 배포를 지원하지 않습니다.

Scrapy-redis는 redis 데이터베이스를 기반으로 하고 scrapy 프레임워크에서 실행되는 구성 요소 집합으로, 이를 통해 scrapy는 분산 전략을 지원할 수 있으며 마스터 측 redis 데이터베이스에 설정된 항목 대기열, 요청 대기열 및 요청 지문을 공유합니다. .

redis는 마스터-슬레이브 동기화를 지원하고 데이터가 메모리에 캐시되므로 Redis 기반 분산 크롤러는 요청 및 데이터를 자주 읽는 데 매우 효율적입니다.

Q92. 어떤 크롤러 프레임워크나 모듈을 사용해 보셨나요?

Python에는 다음이 포함됩니다: urllib, urllib2

제3자: 요청

프레임워크: Scrapy

urllib 및 urllib2 모듈은 모두 URL 요청과 관련된 작업을 수행하지만 서로 다른 기능을 제공합니다.

urllib2.: urllib2.urlopen은 요청 개체 또는 URL을 허용할 수 있습니다(요청 개체를 허용할 때 URL의 헤더를 설정할 수 있음). urllib.urlopen은 하나의 url

urllib만 허용하지만 urllib2는 허용하지 않습니다. urllib와 urllib2가 자주 함께 사용되는 이유

scrapy는 멀티스레딩을 기반으로 하는 다운로더, 파서, 로그 및 예외 처리 기능을 포함하는 캡슐화된 프레임워크입니다.

트위스트 방식은 고정된 단일 웹사이트를 크롤링하고 개발할 때 장점이 있지만, 여러 웹사이트에서 100개의 웹사이트를 크롤링하는 경우 동시 및 분산 처리 측면에서 유연성이 부족하여 조정 및 확장이 불편합니다.

request는 요청에만 사용됩니다. HTTP 요청의 경우 다운로드 및 구문 분석이 모두 자체적으로 처리됩니다. 이는 또한 매우 높은 유연성을 제공합니다. 함수에 대한 유연성이 더 잘 구현될 수 있습니다.

Q93. 일반적으로 사용되는 mysql 엔진은 무엇입니까? 엔진의 차이점은 무엇입니까?

MyISAM과 InnoDB의 두 가지 주요 엔진이 있습니다. 주요 차이점은 다음과 같습니다.

1) InnoDB는 트랜잭션을 지원하지만 MyISAM은 매우 중요합니다. 예를 들어 일련의 추가, 삭제 또는 수정 중에 오류가 발생하면 롤백하고 복원할 수 있지만 MyISAM은 그렇지 않습니다.

3) InnoDB는 외래 키를 지원하지만 MyISAM은 이를 지원하지 않습니다.

4) MyISAM이 기본 엔진이고 InnoDB가 필요합니다.

5) InnoDB는 FULLTEXT 유형 인덱스를 지원하지 않습니다.

6) InnoDB는 테이블의 행 수를 저장하지 않습니다. 전체 테이블을 스캔하여 행 수를 계산하지만 MyISAM은 단순히 읽어내기만 하면 됩니다. 행 수만 저장하면 됩니다.

count(*) 문에 where 조건이 포함되어 있으면 MyISAM도 전체 테이블을 스캔해야 합니다.

7) 자체 증가 필드의 경우 InnoDB는 해당 필드의 인덱스만 포함해야 하지만 MyISAM 테이블에는 있어야 합니다. , 다른 필드와 공동 인덱스를 생성할 수 있습니다.

8) 전체 테이블을 지울 때 InnoDB는 행을 하나씩 삭제하므로 매우 느립니다. MyISAM은 테이블을 재구축합니다.

9) InnoDB는 행 잠금을 지원합니다(어떤 경우에는 업데이트 테이블이 a=1로 설정되고 사용자가 ‘%lee%’

Q94와 같이 전체 테이블이 잠김). 프레임워크가 메커니즘을 실행하나요?

start_urls에서 첫 번째 URL 배치를 가져와 요청을 보냅니다. 요청은 엔진에 의해 스케줄러로 전달되고 획득이 완료된 후

스케줄러는 요청에 해당하는 응답 리소스를 얻기 위해 요청 큐에 있는 요청을 다운로더에게 전달하고, 추출 처리를 위해 자체적으로 작성한 파싱 메서드에 응답을 전달합니다.

필요한 데이터가 추출되면 전달됩니다. 처리를 위해 파이프라인 파일로 넘깁니다 ;

2) URL이 추출되면 이전 단계를 계속 수행합니다(URL 요청을 보내면 엔진이 요청을 스케줄러에 전달하고 대기열에 넣습니다...) 요청 큐에 요청이 없고 프로그램이 종료될 때까지.

Q95. 관련 검색어는 무엇이고 무엇인가요?

주로 내부 조인, 왼쪽 조인, 오른쪽 조인, 전체 조인(외부 조인) 등 쿼리를 위해 여러 테이블을 조인합니다.

Q96 크롤러를 작성하려면 여러 프로세스를 사용하는 것이 더 낫습니까? 아니면 멀티스레딩이 더 나은가요? 왜?

IO 집약적인 코드(파일 처리, 웹 크롤러 등)의 경우 멀티스레딩을 사용하면 효율적으로 효율성을 높일 수 있습니다(단일 스레드에서 IO 작업이 있는 경우 IO 대기가 발생하여 불필요한 시간 낭비가 발생하며

및 멀티 스레딩을 켜면 스레드 A의 효율성을 효과적으로 향상시킬 수 있습니다. 기다리는 동안 자동으로 스레드 B로 전환하여 CPU 리소스를 낭비하지 않고 프로그램 실행 효율성을 향상시킵니다.

실제 데이터 수집 과정에서는 멀티 프로세스나 멀티 스레딩을 설정하기 위해 네트워크 속도와 응답 문제뿐만 아니라 자신의 머신의 하드웨어 조건도 고려해야 합니다.

Q97. 데이터베이스 최적화?

1) 인덱스, SQL 문 최적화 및 느린 쿼리 분석

2) SSD 사용, 디스크 대기열 기술(RAID0, RAID1, RDID5) 등 사용

3) MySQL 자체 테이블 파티셔닝 기술 사용 , 데이터를 여러 파일로 계층화하면 디스크 읽기 효율성이 향상됩니다.

4) 적절한 테이블 엔진을 선택하고 매개변수를 최적화합니다.

5) 아키텍처 수준 캐싱, 정적화 및 배포를 수행합니다.

6) 다음과 같은 더 빠른 저장 방법을 사용합니다. 자주 접근하는 데이터를 저장하는 NoSQL

Q98. 분산 크롤러는 주로 어떤 문제를 해결하나요?

1)ip

2)bandwidth

3)cpu

4)io

Q99. 크롤러 과정에서 인증코드는 어떻게 처리하나요?

1) Scrapy가 함께 제공됩니다

2) 유료 인터페이스

Q100. 일반적인 크롤링 방지 프로그램과 대책은?

1) 헤더 안티 크롤링을 통해 사용자가 요청한 헤더 안티 크롤링은 가장 일반적인 안티 크롤링 전략입니다.

헤더를 크롤러에 직접 추가하고 브라우저의 사용자 에이전트를 크롤러의 헤더에 복사하거나 추천자 값을 대상 웹 사이트 도메인 이름으로 수정할 수 있습니다.

2) 사용자 행동 기반 안티 크롤러

동일 IP가 짧은 시간 내에 동일한 페이지를 여러 번 방문하거나, 동일한 계정이 짧은 시간 내에 동일한 작업을 여러 번 수행하는 등 사용자 행동을 감지하여 시간의.

대부분의 웹사이트는 전자와 같은 상황입니다. 이 경우 IP 프록시를 사용하면 문제를 해결할 수 있습니다.

특수 크롤러를 작성하여 인터넷에 게시된 프록시 IP를 크롤링하고 감지 후 모두 저장할 수 있습니다.

프록시 IP가 많으면 몇 번의 요청마다 하나의 IP를 변경할 수 있습니다. 이는 요청이나 urllib2에서 쉽게 수행할 수 있으므로 첫 번째 안티 크롤러를 쉽게 우회할 수 있습니다.

두 번째 경우에는 각 요청 후 다음 요청을 하기 전에 무작위로 몇 초 정도 기다릴 수 있습니다.

논리적 허점이 있는 일부 웹사이트에서는 여러 번 요청하고, 로그아웃하고, 다시 로그인하고, 계속 요청함으로써 동일한 계정이 짧은 시간에 여러 번 동일한 요청을 할 수 없다는 제한을 우회할 수 있습니다.

3) 동적 페이지에 대한 안티 크롤러

먼저 Fiddler를 사용하여 네트워크 요청을 분석하고 Ajax 요청을 찾아 특정 매개변수와 응답의 구체적인 의미를 분석할 수 있다면 위 방법을 사용할 수 있습니다.

요청 또는 urllib2를 사용하여 Ajax 요청을 시뮬레이션하고 응답의 JSON 형식을 구문 분석하여 필요한 데이터를 가져옵니다.

그러나 일부 웹사이트는 Ajax 요청의 모든 매개변수를 암호화하여 필요한 데이터에 대한 요청을 구성할 수 없습니다.

이 경우 selenium+phantomJS를 사용하여 브라우저 커널을 호출하고 phantomJS를 사용하여 js를 실행하여 인간 작업을 시뮬레이션하고 페이지에서 js 스크립트를 트리거합니다.

위 내용은 파이썬 면접에서 자주 묻는 질문은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿