Rumah > pembangunan bahagian belakang > Tutorial Python > Apakah soalan temuduga yang sering ditanya dalam Python?

Apakah soalan temuduga yang sering ditanya dalam Python?

王林
Lepaskan: 2023-05-25 23:59:27
ke hadapan
1827 orang telah melayarinya

S51. Sila terangkan maksud penggunaan args dan kwargs

Apabila kita tidak tahu berapa banyak parameter untuk dihantar ke fungsi, seperti apabila kita lulus senarai atau tuple, kita menggunakan *args:

def func(*args):

  for i in args:

      print(i) 

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

3

2

1

4

7
Salin selepas log masuk

Apabila kita tidak tahu berapa banyak hujah kata kunci untuk diluluskan, gunakan **kwargs untuk mengumpulkan hujah kata kunci:

def func(**kwargs):

  for i in kwargs:

      print(i,kwargs[i])

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

a.1

b.2

c.7
Salin selepas log masuk

Q52.

Gunakan arahan os.remove(nama fail) atau os.unlink(nama fail)

Q53.Terangkan bagaimana untuk mengakses modul yang ditulis dalam Python daripada C?

Anda boleh mengakses modul yang ditulis dalam Python dalam C melalui:

Module = = PyImport_ImportModule(“<modulename>”)
Salin selepas log masuk

Q54 Gunakan operator // dalam Python?

Ia ialah pengendali Bahagian Lantai, digunakan untuk membahagi dua operan, hasilnya ialah hasil bagi, dan hanya nombor sebelum titik perpuluhan dipaparkan.

Contohnya, 10 // 5 = 2 dan 10.0 // 5.0 = 2.0.

S55 Bagaimana untuk mengalih keluar ruang hadapan dalam rentetan?

Ruang pendahuluan dalam rentetan ialah ruang yang muncul sebelum aksara bukan ruang pertama dalam rentetan.

Kami menggunakan kaedah Istrip() untuk mengeluarkannya daripada rentetan.

’ Data123 '.lstrip()

Hasil:

'Data123 ’

Rentetan awal mengandungi kedua-dua aksara utama dan aksara akhiran , panggilan Istrip() mengalih keluar ruang utama Jika kita ingin mengalih keluar ruang akhiran, kita boleh menggunakan kaedah rstrip().

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

&#39;Data123&#39;
Salin selepas log masuk

Q56. Bagaimanakah cara menggunakan Python untuk mengeluarkan jujukan Fibonacci?

a,b = 0, 1

  while b<100:

  print (b)

  a, b = b, a+b
Salin selepas log masuk

Q57. Bagaimana untuk menukar rentetan kepada pembolehubah integer dalam Python?

Jika rentetan hanya mengandungi aksara angka, anda boleh menggunakan fungsi int() untuk menukarnya kepada integer.

int(‘22’)

Mari kita semak jenis pembolehubah:

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

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

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

<class&#39;int&#39;>
Salin selepas log masuk

Q58. Bagaimana untuk menjana nombor rawak dalam Python?

Untuk menjana nombor rawak, kita boleh mengimport fungsi rawak() daripada modul rawak.

from random import random

random()

0.013501571090371978
Salin selepas log masuk

Kita juga boleh menggunakan fungsi randint(), yang mengambil dua parameter untuk mewakili selang dan mengembalikan integer rawak dalam selang itu.

from random import randint

randint(2,7)

4
Salin selepas log masuk

S59. Bagaimana untuk menggunakan huruf besar dalam rentetan?

Cara paling mudah ialah menggunakan kaedah capitalize().

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

&#39;Daxie&#39;
Salin selepas log masuk

Q60. Bagaimanakah cara untuk menyemak bahawa semua aksara dalam rentetan adalah abjad angka?

Untuk masalah ini, kita boleh menggunakan kaedah isalnum().

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

True

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

False
Salin selepas log masuk

Kita juga boleh menggunakan beberapa kaedah lain:

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

True

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

True

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

True

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

False
Salin selepas log masuk

Q61 Apakah penggabungan dalam Python?

Sambungan dalam Python adalah untuk menyambungkan dua jujukan bersama-sama Kami menggunakan operator + untuk menyelesaikan:

&#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
Salin selepas log masuk

Terdapat ralat berjalan di sini kerana (4) dianggap sebagai integer sekali lagi:

(2,3)+(4,)

(2, 3,4)
Salin selepas log masuk

S62. Apakah itu rekursi?

Apabila fungsi memanggil dirinya secara langsung atau tidak langsung semasa panggilannya, ini adalah rekursi. Tetapi untuk mengelakkan gelung tak terhingga, mesti ada syarat akhir Contohnya:

def facto(n):

  if n==1: return 1

  return n*facto(n-1)

facto(5)

120
Salin selepas log masuk

Q63.

Penjana akan menjana satu siri nilai untuk lelaran, jadi ia adalah objek boleh lelaran.

Ia mengira elemen seterusnya secara berterusan semasa gelung for dan menamatkan gelung for dalam keadaan yang sesuai.

Kami mentakrifkan fungsi yang "menghasilkan" nilai satu demi satu, dan kemudian menggunakan gelung for untuk mengulanginya.

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
Salin selepas log masuk

S64. Apakah itu iterator?

Iterator ialah satu cara untuk mengakses elemen koleksi.

Objek iterator mula mengakses dari elemen pertama koleksi sehingga semua elemen diakses.

Pelajar hanya boleh bergerak ke hadapan dan bukan ke belakang. Kami mencipta iterator menggunakan fungsi inter().

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

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

next (odds)

1

next (odds)

2

next (odds)

3

next (odds)

4

next (odds)

5
Salin selepas log masuk

S65 Sila bercakap tentang perbezaan antara penjana dan iterator

1) Apabila menggunakan penjana, kami mencipta fungsi apabila menggunakan iterator, kami menggunakan fungsi terbina dalam iter() dan seterusnya ();

2) Dalam penjana, kami menggunakan kata kunci ‘hasil’ " pernyataan yang anda boleh sesuaikan;

Penjana akan menyimpan keadaan pembolehubah setempat setiap kali gelung dijeda. Iterator hanya memerlukan objek lelaran untuk lelaran dan tidak perlu menggunakan pembolehubah setempat

5) Anda boleh melaksanakan iterator anda sendiri menggunakan kelas, tetapi penjana tidak boleh dilaksanakan

6) Penjana berjalan cepat, mempunyai sintaks yang ringkas dan lebih ringkas;

S66 Apakah fungsi zip() digunakan?

Pemula Python mungkin tidak begitu biasa dengan fungsi zip() ini boleh mengembalikan lelaran tupel.

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

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

Di sini fungsi zip() menggandingkan item data dalam dua senarai dan mencipta tuple daripadanya .

Q67 Bagaimana untuk menggunakan Python untuk mengetahui direktori yang anda berada sekarang?

Kita boleh menggunakan fungsi/kaedah getcwd() untuk mengimportnya daripada os modul.

import os

os.getcwd()

‘C:Users37410Kod desktop’

Q68.

Ini juga agak mudah, cuma panggil fungsi len() pada rentetan yang ingin kita kira panjangnya.

len(‘Data 123’)

8

Q69 Bagaimana hendak memadam objek terakhir daripada senarai?

Mengalih keluar dan mengembalikan objek atau obj terakhir daripada senarai.

list.pop(obj = list [-1])
Salin selepas log masuk

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

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

1)filter()

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

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

[6,7]

2)map()
Salin selepas log masuk

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

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

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

3)reduce()
Salin selepas log masuk

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

from functools import reduce

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

-13
Salin selepas log masuk

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
Salin selepas log masuk

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

import random

def random_line(fname):

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

return random.choice(lines)

print(random_line(&#39;test.txt&#39;))
Salin selepas log masuk

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”))
Salin selepas log masuk

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)
Salin selepas log masuk

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

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

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

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

list.sort()

print (list)

Django有关
Salin selepas log masuk

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)
Salin selepas log masuk

返回当前日期和时间,作为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
Salin selepas log masuk

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
Salin selepas log masuk

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

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

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

2)有一定的局限性

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

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

Anda mendapat banyak operasi vektor dan matriks, yang kadangkala boleh mengelakkan kerja yang tidak perlu.

4) Tatasusunan NumPy lebih pantas

Anda boleh menggunakan NumPy, FFT, konvolusi, carian pantas, statistik asas, algebra linear, histogram, dsb. terbina dalam.

Q88 Terangkan penggunaan penghias

Penghias dalam Python digunakan untuk mengubah suai atau menyuntik kod dalam fungsi atau kelas.

Menggunakan penghias, anda boleh membungkus panggilan kaedah kelas atau fungsi supaya bahagian kod dilaksanakan sebelum atau selepas kod asal dilaksanakan.

Penghias boleh digunakan untuk menyemak kebenaran, mengubah suai atau menjejaki parameter yang dihantar ke kaedah, log panggilan ke kaedah tertentu, dll.

Q89. Apakah perbezaan antara NumPy dan SciPy?

Dalam dunia yang ideal, NumPy hanya akan mengandungi jenis dan operasi data tatasusunan yang paling asas, seperti pengindeksan, pengisihan, pembentukan semula dan fungsi elemen asas.

2) Semua kod berangka akan berada dalam SciPy. Walaupun begitu, NumPy masih mengekalkan matlamat keserasian ke belakang dan berusaha untuk mengekalkan semua ciri yang disokong oleh pendahulunya.

Jadi, walaupun lebih sesuai milik SciPy, NumPy masih termasuk beberapa fungsi algebra linear. Walau apa pun, SciPy mengandungi versi yang lebih komprehensif bagi modul algebra linear dan banyak algoritma berangka lain daripada yang lain.

Jika anda menggunakan python untuk pengiraan saintifik, disyorkan untuk memasang NumPy dan SciPy. Kebanyakan ciri baharu adalah milik SciPy dan bukannya NumPy.

Q90. Bagaimana cara menggunakan NumPy/SciPy untuk membuat plot/visualisasi 3D?

Seperti pemplotan 2D, grafik 3D berada di luar skop NumPy dan SciPy, tetapi sama seperti kes 2D, terdapat pakej yang disepadukan dengan NumPy.

Matplotlib menyediakan plot 3D asas dalam sub-pakej mplot3d, manakala Mayavi menggunakan enjin VTK berkuasa untuk menyediakan pelbagai fungsi visualisasi 3D berkualiti tinggi.

Rangka kerja dan rangka kerja yang menakutkan

S91 Apakah perbezaan antara scrapy-redis? Mengapa memilih pangkalan data redis?

Scrapy ialah rangka kerja perangkak Python dengan kecekapan rangkak yang sangat tinggi dan penyesuaian yang tinggi, tetapi ia tidak menyokong pengedaran.

Dan scrapy-redis ialah satu set komponen berdasarkan pangkalan data redis dan berjalan pada rangka kerja scrapy, yang membolehkan scrapy menyokong strategi yang diedarkan berkongsi baris gilir item, permintaan baris gilir dan cap jari permintaan dalam Pengumpulan pangkalan data redis sisi.

Oleh kerana redis menyokong penyegerakan tuan-hamba dan data dicache dalam ingatan, perangkak yang diedarkan berdasarkan redis sangat cekap dalam membaca permintaan dan data frekuensi tinggi.

S92 Apakah rangka kerja atau modul perangkak yang telah anda gunakan?

Python disertakan dengan: urllib, urllib2

Pihak ketiga: permintaan

Rangka Kerja: Scrapy

Kedua-dua modul urllib dan urllib2 melakukan operasi yang berkaitan dengan URL permintaan , tetapi mereka menyediakan fungsi yang berbeza.

urllib2.: urllib2.urlopen boleh menerima objek atau url Permintaan (apabila menerima objek Permintaan, anda boleh menetapkan pengepala URL), urllib.urlopen hanya menerima url

urllib mempunyai urlencode, urllib2 tidak, jadi ia sentiasa urllib dan urllib2 sering digunakan bersama

Scrapy ialah rangka kerja terkapsul Ia termasuk pemuat turun, penghurai, log dan pengendalian pengecualian, berdasarkan multi-threading ,.

Kaedah berpintal mempunyai kelebihan untuk merangkak dan membangunkan tapak web tunggal tetap, namun, untuk merangkak 100 tapak web pada berbilang tapak web, ia tidak cukup fleksibel dari segi pemprosesan serentak dan diedarkan, menjadikannya menyusahkan untuk menyesuaikan dan mengembangkan; .

permintaan ialah pustaka HTTP Ia hanya digunakan untuk membuat permintaan Untuk permintaan HTTP, ia adalah pustaka yang berkuasa semuanya dikendalikan oleh anda sendiri. Ia sangat fleksibel dan boleh melaksanakan fungsi dengan lebih baik.

Q93 Apakah enjin mysql anda yang biasa digunakan? Apakah perbezaan antara enjin?

Terdapat dua enjin utama, MyISAM dan InnoDB Perbezaan utama adalah seperti berikut:

1) InnoDB menyokong transaksi, tetapi MyISAM tidak. Transaksi ialah kaedah pemprosesan peringkat tinggi Contohnya, dalam beberapa penambahan lajur, pemadaman dan pengubahsuaian, selagi ralat berlaku, ia boleh digulung semula dan dipulihkan, tetapi MyISAM tidak boleh

MyISAM lebih sesuai untuk aplikasi berasaskan pertanyaan dan sisipan, manakala InnoDB lebih sesuai untuk aplikasi yang memerlukan pengubahsuaian yang kerap dan melibatkan keselamatan yang lebih tinggi

3) InnoDB menyokong kunci asing, tetapi MyISAM tidak

4) MyISAM ialah enjin lalai, InnoDB perlu dinyatakan;

5) InnoDB tidak menyokong indeks jenis FULLTEXT

6) InnoDB tidak menyimpan bilangan baris dalam jadual, seperti pilih; count(*) dari jadual Pada masa ini, InnoDB;

perlu mengimbas keseluruhan jadual untuk mengira bilangan baris, tetapi MyISAM hanya perlu membaca bilangan baris yang disimpan.

Perhatikan bahawa apabila pernyataan count(*) mengandungi keadaan where, MyISAM juga perlu mengimbas keseluruhan jadual

7) Untuk medan meningkat sendiri, InnoDB mesti mengandungi indeks sahaja; medan itu, tetapi dalam jadual MyISAM, indeks bersama boleh diwujudkan bersama medan lain;

8) Apabila mengosongkan keseluruhan jadual, InnoDB memadamkan baris satu demi satu, dan kecekapannya sangat perlahan. MyISAM akan membina semula jadual;

9) InnoDB menyokong kunci baris (dalam beberapa kes, keseluruhan jadual dikunci, seperti set jadual kemas kini a=1 di mana pengguna seperti ‘%lee%’

S94. Huraikan mekanisme operasi rangka kerja scrapy?

Dapatkan kumpulan pertama URL dari start_urls dan hantar permintaan itu diserahkan kepada penjadual oleh enjin dan dimasukkan ke dalam barisan permintaan pemerolehan selesai,

Penjadual menyerahkan permintaan dalam baris gilir permintaan kepada pemuat turun untuk mendapatkan sumber respons yang sepadan dengan permintaan dan menyerahkan respons kepada kaedah penghuraian yang ditulis dengan sendirinya untuk pemprosesan pengekstrakan:

Jika data yang diperlukan diekstrak, Kemudian serahkan kepada fail saluran paip untuk diproses

2) Jika url diekstrak, teruskan melakukan langkah sebelumnya (hantar permintaan url, dan enjin akan menyerahkan permintaan kepada penjadual dan gilirannya...) sehingga baris gilir permintaan Tiada permintaan, program tamat.

S95 Apakah pertanyaan berkaitan dan apakah itu?

Sertai berbilang jadual untuk pertanyaan, terutamanya termasuk sambung dalam, sambung kiri, sambung kanan, sambung penuh (sambungan luar)

S96 Adakah lebih baik menggunakan berbilang proses untuk menulis perangkak? Atau multi-threading adalah lebih baik? kenapa?

Untuk kod intensif IO (pemprosesan fail, perangkak web, dll.), berbilang benang boleh meningkatkan kecekapan dengan berkesan (jika terdapat operasi IO di bawah satu utas, menunggu IO akan berlaku, menyebabkan pembaziran masa yang tidak perlu ,

Mendayakan berbilang benang boleh bertukar secara automatik kepada utas B semasa utas A menunggu, tanpa membazirkan sumber CPU, sekali gus meningkatkan kecekapan pelaksanaan program).

Dalam proses pengumpulan data sebenar, anda perlu mempertimbangkan bukan sahaja kelajuan rangkaian dan isu tindak balas, tetapi juga keadaan perkakasan mesin anda sendiri untuk menyediakan berbilang proses atau berbilang benang.

S97.

1) Optimumkan indeks, pernyataan SQL dan analisis pertanyaan perlahan; 2) Optimumkan perkakasan; >

3) Gunakan teknologi pembahagian jadual MySQL sendiri untuk melapiskan data ke dalam fail yang berbeza, yang boleh meningkatkan kecekapan pembacaan cakera

4) Pilih enjin jadual yang sesuai dan optimumkan parameter

5 ) Menjalankan cache peringkat seni bina, statik dan pengedaran;

1)ip

2)lebar jalur

3)cpu

4)io

S99. Bagaimana pula dengan kod pengesahan semasa proses merangkak?

1) Scrapy disertakan dengan

2) Antara muka berbayar

Q100 anti-crawler dan tindakan balas yang biasa?

1) Pengepala anti perangkak diminta daripada pengguna melalui Pengepala anti perangkak ialah strategi anti perangkak yang paling biasa.

Anda boleh menambah Pengepala terus pada perangkak, menyalin Ejen Pengguna penyemak imbas ke Pengepala perangkak atau mengubah suai nilai Perujuk kepada nama domain tapak web sasaran.

2) Anti-merangkak berdasarkan gelagat pengguna

Dengan mengesan gelagat pengguna, seperti IP yang sama melawat halaman yang sama beberapa kali dalam tempoh yang singkat, atau akaun yang sama melakukan operasi yang sama beberapa kali dalam tempoh masa yang singkat.

Kebanyakan tapak web berada dalam situasi sebelumnya Untuk situasi ini, menggunakan proksi IP boleh menyelesaikannya.

Anda boleh menulis perangkak khas untuk merangkak IP proksi yang diterbitkan di Internet dan menyimpan kesemuanya selepas pengesanan.

Selepas anda mempunyai sejumlah besar IP proksi, anda boleh menukar satu IP setiap beberapa permintaan Ini mudah dilakukan dalam permintaan atau urllib2, supaya anda boleh memintas anti-perakak pertama dengan mudah.

Untuk kes kedua, anda boleh menunggu secara rawak beberapa saat selepas setiap permintaan sebelum membuat permintaan seterusnya.

Sesetengah tapak web yang mempunyai kelemahan logik boleh memintas sekatan bahawa akaun yang sama tidak boleh membuat permintaan yang sama beberapa kali dalam tempoh yang singkat dengan meminta beberapa kali, log keluar, log masuk semula dan terus meminta.

3) Anti-crawler untuk halaman dinamik

Mula-mula gunakan Fiddler untuk menganalisis permintaan rangkaian Jika kami dapat mencari permintaan ajax dan menganalisis parameter khusus dan makna khusus respons, kami boleh Gunakan kaedah di atas.

Gunakan permintaan atau urllib2 untuk mensimulasikan permintaan ajax dan menghuraikan format JSON respons untuk mendapatkan data yang diperlukan.

Walau bagaimanapun, sesetengah tapak web menyulitkan semua parameter permintaan ajax dan tidak boleh membina permintaan untuk data yang mereka perlukan.

Dalam kes ini, gunakan selenium+phantomJS untuk memanggil kernel penyemak imbas dan gunakan phantomJS untuk melaksanakan js untuk mensimulasikan operasi manusia dan mencetuskan skrip js dalam halaman.

Atas ialah kandungan terperinci Apakah soalan temuduga yang sering ditanya dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan