エージェント西刺ipを這い出す

1662 ワード

西刺からエージェントipを這い出すことができる小さな爬虫類を書いて、もともとipエージェントのテストとエージェントの爬虫類を加えてウェブサイトを這い出すことができて、しかしエージェントipはずっと無効で、どんな原因なのか分からないで、次回きっと完備します
# -*- coding: UTF-8 -*-
import requests
import re
import random # 
from multiprocessing import Pool # 
from  requests.exceptions import RequestException

def get_one_page(url):
    try:
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3278.0 Safari/537.36'}
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
    except RequestException:
        return None

lengthは上位ページのipを決定し、lengthのサイズを自由に決定できます
def get_url_list(url,length=3):
    print('proxy ip download the first %d pages:' %length)
    urllist = []
    for i in range(1, length):
        urllist.append(url[:-1] + str(i))
    return urllist

正規表現でipアドレスとポート番号を抽出し、httpsのipを地域でフィルタリングする
def extractip(html):
    pattern = re.compile('((?.*?(.*?).*?href.*?>(.*?).*?HTTP',re.S)
    items = re.findall(pattern, html)
    return items

爬取中のipからランダムに1つ選択
def rangeip(listip):
    return random.sample(listip,1)
def main():
    biglistip = []
    getipurl = 'http://www.xicidaili.com/nn/1'
    urllist = get_url_list(getipurl)
    for url in urllist:
        html = get_one_page(url)
        items = extractip(html)
        for item in items:
            biglistip.append(item)
    print(rangeip(biglistip))

if __name__ == '__main__':
    main()