写真遅延ロード
疑似属性を持ついくつかのフォトサイトのimgのsrcタグページのロード時のすべての画像使い捨て装填されない、画像リンクを取得するには、以下に示すように、imgタグの注意属性を払って、プロパティをSRC2に変更されます
代理
クローズ、またはアクセスプロキシIPを使用した:要求の高い周波数に短時間でウェブサイトを立ち上げ、それはエラーConectionPoolが生成されます、接続プール(HTTP)のリソースが枯渇している、あなたはリクエストヘッダの接続で設定することができます。
- 代理
- プロキシ:IPアドレスの変更要求を達成することができ、要求の転送を達成
- IPを交換するための要求でどのように要求
- 匿名のエージェント度:
- 透明:あなたを知っているプロキシサーバーを使用し、あなたの本当のIPアドレスを知っています
- 匿名:サーバーは、プロキシを使用する知っているが、あなたの本当のIPを知りません
- 高い隠蔽:サーバーがプロキシを使用知りませんが、あなたの本当のIPを知りません
- エージェントタイプ:
- http:プロキシのこのタイプは、HTTPプロトコルのみに要求を転送することができます
- HTTPS:HTTPSプロトコルにのみに要求を転送することができます
- 無料プロキシIPウェブサイト
- 即効性の
- 西寺エージェント
- goubanjia
- プロキシウィザード(推奨)します。http://http.zhiliandaili.cn/
- 爬虫類での出会いは、対処する方法を禁止IP?
- プロキシを使用します
- プロキシ・プールを構築
- ダイヤルアップサーバー
例:エージェントのIPを表示します
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
url = 'https://www.baidu.com/s?wd=ip'
# 开启代理:在请求中加入proxies={'http/https':'ip:port'}
page_text = requests.get(url=url,headers=headers,proxies={'https':'1.197.203.187:9999'}).text
with open('ip.html','w',encoding='utf-8') as fp:
fp.write(page_text)
例:プロキシIPプールの構築
#基于代理精灵构建一个ip池
from lxml import etree
import requests,os
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
all_ips = [] #列表形式的代理池
proxy_url = 'http://t.11jsq.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=52&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=2'
proxy_page_text = requests.get(url=proxy_url,headers=headers).text
tree = etree.HTML(proxy_page_text)
proxy_list = tree.xpath('//body//text()')
for ip in proxy_list:
dic = {'https':ip}
all_ips.append(dic)
print(all_ips)
例:西寺プロキシIPをクロール上記スレッドプール
#爬取西祠代理中的免费代理ip
url = 'https://www.xicidaili.com/nn/%d'
free_proxies = []
for page in range(1,30):
new_url = format(url%page)
page_text = requests.get(new_url,headers=headers,proxies=random.choice(all_ips)).text
tree = etree.HTML(page_text)
tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:]#xpath表达式中不可以出现tbody
for tr in tr_list:
ip = tr.xpath('./td[2]/text()')[0]
port = tr.xpath('./td[3]/text()')[0]
t_type = tr.xpath('./td[7]/text()')[0]
dic = {
'ip':ip,
'port':port,
'type':t_type
}
free_proxies.append(dic)
print('第{}页爬取完毕!!!'.format(page))
print(len(free_proxies))
クッキー
役割:該当する状態のクライアントを保ちます
- あなたは抗登るに対処する方法のクッキーに遭遇した場合、爬虫類のリクエストでクッキーを運びますか?
- マニュアル処理
- ヘッダでカプセル化されたクッキーのキャプチャツールを、キャプチャ
- アプリケーションシナリオ:クッキーは、もはや有効ではないと動的な変更ではありません
- 自動処理
- セッション・メカニズムを使用します
- 使用シナリオ:ダイナミッククッキー
- セッション・オブジェクト:ほとんど同一物体、及び使用モジュールは、処理要求で生成されたクッキーを要求する場合、要求は、セッションを使用して開始された場合、クッキーは自動的にセッションに保存されます。
- マニュアル処理
例:クロールデータ雪だるまニュースネットワークます。https://xueqiu.com/
#获取一个session对象
session = requests.Session()
main_url = 'https://xueqiu.com' #推测对该url发起请求会产生cookie
session.get(main_url,headers=headers)
url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json'
params = {
'since_id': '-1',
'max_id': '20346152',
'count': '15',
'category': '-1',
}
page_text = session.get(url,headers=headers,params=params).json()
page_text
識別コード
コーディングを識別するために、関連するオンラインプラットフォーム
コーディングウサギ
クラウド・コーディング
スーパーイーグルス:
http://www.chaojiying.com/about.html
- 1.登録、ログイン(ユーザー中心の認証)
- 伐採後2:
- 生成するソフトウェアID->のidソフトウェア:ソフトウェアを作成します。
- ダウンロードサンプルコード:開発ドキュメント - > python->ダウンロード
例:古代パケット網画像を識別するコード
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
def getCodeImgText(imgPath,img_type):
chaojiying = Chaojiying_Client('bobo328410948', 'bobo328410948', '899370') #用户中心>>软件ID 生成一个替换 96001
im = open(imgPath, 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
return chaojiying.PostPic(im, img_type)['pic_str']
#使用session捕获cookie,cookie来自验证码图片链接加载
s = requests.Session()
first_url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
s.get(first_url,headers=headers)
url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
page_text = requests.get(url,headers=headers).text
tree = etree.HTML(page_text)
img_src = 'https://so.gushiwen.org'+tree.xpath('//*[@id="imgCode"]/@src')[0]
img_code_data = s.get(img_src,headers=headers).content
with open('./gushiwen.jpg','wb') as fp:
fp.write(img_code_data)
img_text = getCodeImgText('./gushiwen.jpg',1004)
print(img_text)
#动态捕获动态的请求参数
__VIEWSTATE = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
__VIEWSTATEGENERATOR = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]
#点击登录按钮后发起请求的url:通过抓包工具捕获
login_url = 'https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
data = {
'__VIEWSTATE': __VIEWSTATE,
'__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
'from': 'http://so.gushiwen.org/user/collect.aspx',
'email': '[email protected]',
'pwd': 'bobo328410948',
'code': img_text,
'denglu': '登录',
}
main_page_text = s.post(login_url,headers=headers,data=data).text
with open('main.html','w',encoding='utf-8') as fp:
fp.write(main_page_text)
- なぜアナログクローラーにログインする必要がありますか?
- 一部のデータのみがログイン後を介して表示することができます!
- 抗登るに関与します:
- 検証コード
- 動的パラメータを要求する各要求は、動的変更要求パラメータに対応しています
- ダイナミックキャプチャ:通常の状況下では、要求の動的パラメータは、フロントページのソースコードに非表示になります
- クッキー
非同期スレッドプールのクロールに基づいて、
import requests
from multiprocessing.dummy import Pool
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
url = 'https://www.qiushibaike.com/text/page/%d/'
urls = []
for page in range(1,11):
new_url = format(url%page)
urls.append(new_url)
def get_request(url): #必须有一个参数
return requests.get(url,headers=headers).text
pool = Pool(10)
response_text_list = pool.map(get_request,urls) #使用自定义的函数func异步的处理urls列表中的每一个列表元素
print(response_text_list)