亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

爬蟲代理池Python3WebSpider源代碼測試過程解析

2024-09-09 19:03:22
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了爬蟲代理池Python3WebSpider源代碼測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

元類屬性的使用

代碼

主要關于元類的使用

通過獲取由元類生成的爬蟲抓取類的部分屬性.這里為抓取函數,以相同的字符開頭的抓取函數,生成屬性列表,這樣可以持續調用.目的是可以僅僅添加不同的抓取函數抓取不同的網站,而類的其他部分不用做調整.

部分代碼:

class ProxyMetaclass(type):  def __new__(cls, name, bases, attrs):    count = 0    attrs['__CrawlFunc__'] = []    for k, v in attrs.items():      if 'crawl_' in k:        attrs['__CrawlFunc__'].append(k)        count += 1    attrs['__CrawlFuncCount__'] = count    return type.__new__(cls, name, bases, attrs)class Crawler(object, metaclass=ProxyMetaclass):  def get_proxies(self, callback):    proxies = []    for proxy in eval("self.{}()".format(callback)):      print('成功獲取到代理', proxy)      proxies.append(proxy)    return proxies      def crawl_daili66(self, page_count=4):    """    獲取代理66    :param page_count: 頁碼    :return: 代理    """    start_url = 'http://www.66ip.cn/{}.html'    urls = [start_url.format(page) for page in range(1, page_count + 1)]    for url in urls:      print('Crawling', url)      html = get_page(url)      if html:        doc = pq(html)        trs = doc('.containerbox table tr:gt(0)').items()        for tr in trs:          ip = tr.find('td:nth-child(1)').text()          port = tr.find('td:nth-child(2)').text()          yield ':'.join([ip, port])

測試方法

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time  : 12/19/19 4:10 PM# @Author : yon# @Email  : @qq.com# @File  : testimport jsonimport refrom pyquery import PyQuery as pqclass ProxyMetaclass(type):  def __new__(cls, name, bases, attrs):    count = 0    attrs['__CrawlFunc__'] = []    for k, v in attrs.items():      print("打印k")      print(k)      print("打印v")      print(v)      if 'crawl_' in k:        attrs['__CrawlFunc__'].append(k)        count += 1    attrs['__CrawlFuncCount__'] = count    return type.__new__(cls, name, bases, attrs)class Crawler(object, metaclass=ProxyMetaclass):  def get_proxies(self, callback):    proxies = []    for proxy in eval("self.{}()".format(callback)):      print('成功獲取到代理', proxy)      proxies.append(proxy)    return proxies  def crawl_daili66(self, page_count=4):    """    獲取代理66    :param page_count: 頁碼    :return: 代理    """    start_url = 'http://www.66ip.cn/{}.html'    urls = [start_url.format(page) for page in range(1, page_count + 1)]    for url in urls:      print('Crawling', url)      html = get_page(url)      if html:        doc = pq(html)        trs = doc('.containerbox table tr:gt(0)').items()        for tr in trs:          ip = tr.find('td:nth-child(1)').text()          port = tr.find('td:nth-child(2)').text()          yield ':'.join([ip, port])  def crawl_ip3366(self):    for page in range(1, 4):      start_url = 'http://www.ip3366.net/free/?stype=1&page={}'.format(page)      html = get_page(start_url)      ip_address = re.compile('<tr>/s*<td>(.*?)</td>/s*<td>(.*?)</td>')      # /s * 匹配空格,起到換行作用      re_ip_address = ip_address.findall(html)      for address, port in re_ip_address:        result = address + ':' + port        yield result.replace(' ', '')  def crawl_kuaidaili(self):    for i in range(1, 4):      start_url = 'http://www.kuaidaili.com/free/inha/{}/'.format(i)      html = get_page(start_url)      if html:        ip_address = re.compile('<td data-title="IP">(.*?)</td>')        re_ip_address = ip_address.findall(html)        port = re.compile('<td data-title="PORT">(.*?)</td>')        re_port = port.findall(html)        for address, port in zip(re_ip_address, re_port):          address_port = address + ':' + port          yield address_port.replace(' ', '')  def crawl_xicidaili(self):    for i in range(1, 3):      start_url = 'http://www.xicidaili.com/nn/{}'.format(i)      headers = {        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',        'Cookie': '_free_proxy_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJWRjYzc5MmM1MTBiMDMzYTUzNTZjNzA4NjBhNWRjZjliBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMUp6S2tXT3g5a0FCT01ndzlmWWZqRVJNek1WanRuUDBCbTJUN21GMTBKd3M9BjsARg%3D%3D--2a69429cb2115c6a0cc9a86e0ebe2800c0d471b3',        'Host': 'www.xicidaili.com',        'Referer': 'http://www.xicidaili.com/nn/3',        'Upgrade-Insecure-Requests': '1',      }      html = get_page(start_url, options=headers)      if html:        find_trs = re.compile('<tr class.*?>(.*?)</tr>', re.S)        trs = find_trs.findall(html)        for tr in trs:          find_ip = re.compile('<td>(/d+/./d+/./d+/./d+)</td>')          re_ip_address = find_ip.findall(tr)          find_port = re.compile('<td>(/d+)</td>')          re_port = find_port.findall(tr)          for address, port in zip(re_ip_address, re_port):            address_port = address + ':' + port            yield address_port.replace(' ', '')  def crawl_ip3366(self):    for i in range(1, 4):      start_url = 'http://www.ip3366.net/?stype=1&page={}'.format(i)      html = get_page(start_url)      if html:        find_tr = re.compile('<tr>(.*?)</tr>', re.S)        trs = find_tr.findall(html)        for s in range(1, len(trs)):          find_ip = re.compile('<td>(/d+/./d+/./d+/./d+)</td>')          re_ip_address = find_ip.findall(trs[s])          find_port = re.compile('<td>(/d+)</td>')          re_port = find_port.findall(trs[s])          for address, port in zip(re_ip_address, re_port):            address_port = address + ':' + port            yield address_port.replace(' ', '')  def crawl_iphai(self):    start_url = 'http://www.iphai.com/'    html = get_page(start_url)    if html:      find_tr = re.compile('<tr>(.*?)</tr>', re.S)      trs = find_tr.findall(html)      for s in range(1, len(trs)):        find_ip = re.compile('<td>/s+(/d+/./d+/./d+/./d+)/s+</td>', re.S)        re_ip_address = find_ip.findall(trs[s])        find_port = re.compile('<td>/s+(/d+)/s+</td>', re.S)        re_port = find_port.findall(trs[s])        for address, port in zip(re_ip_address, re_port):          address_port = address + ':' + port          yield address_port.replace(' ', '')  def crawl_data5u(self):    start_url = 'http://www.data5u.com/free/gngn/index.shtml'    headers = {      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',      'Accept-Encoding': 'gzip, deflate',      'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',      'Cache-Control': 'max-age=0',      'Connection': 'keep-alive',      'Cookie': 'JSESSIONID=47AA0C887112A2D83EE040405F837A86',      'Host': 'www.data5u.com',      'Referer': 'http://www.data5u.com/free/index.shtml',      'Upgrade-Insecure-Requests': '1',      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',    }    html = get_page(start_url, options=headers)    if html:      ip_address = re.compile('<span><li>(/d+/./d+/./d+/./d+)</li>.*?<li class=/"port.*?>(/d+)</li>', re.S)      re_ip_address = ip_address.findall(html)      for address, port in re_ip_address:        result = address + ':' + port        yield result.replace(' ', '')class Getter():  def __init__(self):    self.crawler = Crawler()  def run(self):    print('獲取器開始執行')    for callback_label in range(self.crawler.__CrawlFuncCount__):      print(callback_label)      callback = self.crawler.__CrawlFunc__[callback_label]      print(callback)      # # 獲取代理      # proxies = self.crawler.get_proxies(callback)      # sys.stdout.flush()      # for proxy in proxies:      #   self.redis.add(proxy)if __name__ == '__main__':  get = Getter()  get.run()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品扒开腿爽爽爽视频| 久久久噜噜噜久噜久久| 97视频在线看| 国产精品大陆在线观看| www.亚洲免费视频| 国产精品视频免费在线观看| 国产精品一区二区三区久久久| 亚洲欧洲国产一区| 国产美女主播一区| 欧美与黑人午夜性猛交久久久| 精品国产区一区二区三区在线观看| 久久99国产精品久久久久久久久| 久久久亚洲精品视频| 久久久久久久av| 精品久久久视频| 第一福利永久视频精品| 亚洲国产高清福利视频| 欧美高清视频在线播放| 亚洲人成五月天| 91亚洲国产精品| 成人黄色短视频在线观看| 亚洲97在线观看| 中文字幕精品—区二区| 欧美视频第一页| 亚洲自拍小视频免费观看| 91av免费观看91av精品在线| 亚洲香蕉成人av网站在线观看| 欧美国产日产韩国视频| 欧美日韩中文字幕| 久久久999精品| 91九色国产在线| 少妇精69xxtheporn| 欧美午夜影院在线视频| 亚洲片在线资源| 欧美激情亚洲综合一区| 国产精品国内视频| 日韩精品久久久久久福利| 国产精品视频久久久久| 亚洲人精品午夜在线观看| 国产精品国产三级国产aⅴ浪潮| 日韩中文字幕久久| 亚洲精品美女在线观看| 国产日韩在线观看av| 精品亚洲国产视频| 国产精品国产亚洲伊人久久| 国产精品亚洲一区二区三区| 国产97人人超碰caoprom| 91高清视频在线免费观看| 国产一区二区三区在线观看视频| xxxxx成人.com| 久久免费精品视频| 欧美成人性生活| 日韩午夜在线视频| 亚洲理论在线a中文字幕| 精品国产欧美一区二区五十路| 精品国内亚洲在观看18黄| 亚洲第一色在线| 蜜臀久久99精品久久久无需会员| 91国产视频在线播放| 精品免费在线观看| 91美女片黄在线观| 久久精视频免费在线久久完整在线看| 欧美韩国理论所午夜片917电影| 亚洲色图综合久久| 国产精品一区二区久久国产| 国产成人短视频| 2018中文字幕一区二区三区| 日韩电影中文字幕在线| 国产丝袜一区二区| 日韩中文在线中文网三级| 国产成人精品综合久久久| 久久久亚洲天堂| 亚洲精品v欧美精品v日韩精品| 国产日韩欧美成人| 久久久精品欧美| 久久精品一偷一偷国产| 久久精品电影一区二区| 国产精品美乳在线观看| 欧美一级大胆视频| 亚洲成人av在线| 深夜福利91大全| 97国产精品视频人人做人人爱| 国产日韩亚洲欧美| 欧美成人手机在线| 日韩在线免费av| 91欧美日韩一区| 欧美日韩一区二区精品| 91在线直播亚洲| 91国自产精品中文字幕亚洲| 国色天香2019中文字幕在线观看| 亚洲精品视频免费在线观看| 日韩有码在线电影| 久久人人看视频| 日本午夜在线亚洲.国产| 久久久久久91香蕉国产| 97视频在线免费观看| 国产一区二区三区四区福利| 亚洲精品av在线播放| 一本大道亚洲视频| 欧美日韩中文字幕日韩欧美| 久久理论片午夜琪琪电影网| 欧美一区视频在线| 青草青草久热精品视频在线观看| 这里只有精品视频在线| 久久99精品久久久久久琪琪| 色在人av网站天堂精品| 国产精品视频不卡| 久久99久国产精品黄毛片入口| 日本精品在线视频| 欧美激情伊人电影| 成人亚洲激情网| 精品国产一区久久久| 久久久视频精品| 91精品久久久久久久久中文字幕| 国产精品久久视频| 久久视频国产精品免费视频在线| 亚洲精品影视在线观看| 亚洲精品视频免费| 在线观看久久久久久| 亚洲91精品在线观看| 国语自产精品视频在线看抢先版图片| 欧美老女人bb| 18性欧美xxxⅹ性满足| 久久国产精品影视| 97成人精品视频在线观看| 日韩风俗一区 二区| 亚洲日本中文字幕免费在线不卡| 午夜免费日韩视频| 国产精品678| 国产福利精品av综合导导航| 欧美性猛交xxxx久久久| 成人写真视频福利网| 欧美电影《睫毛膏》| 中文字幕精品久久| 日韩精品视频三区| 不卡av在线网站| zzjj国产精品一区二区| 国产成人鲁鲁免费视频a| 国产精自产拍久久久久久| 91免费的视频在线播放| 久久久久北条麻妃免费看| 国产视频精品久久久| 欧美日韩中文字幕在线视频| 久久精品国产精品亚洲| 川上优av一区二区线观看| 久久久爽爽爽美女图片| 亚洲欧美制服另类日韩| 久久天天躁日日躁| 久久精品精品电影网| 国产精品久久久久久久电影| 国产丝袜一区二区三区免费视频| 亚洲福利在线看| 精品一区二区三区四区在线| 国产精品激情自拍| 91欧美激情另类亚洲| 欧美国产视频日韩| 欧美第一淫aaasss性| 精品国产91久久久久久| 一区国产精品视频| 一本色道久久88综合亚洲精品ⅰ| 欧美第一淫aaasss性| 欧美亚洲成人xxx| 亚洲成人久久一区| 亚洲精品按摩视频|