网络兼职创业网 代理创业p爬走在线代理ython爬虫:爬取免费代理ip

p爬走在线代理ython爬虫:爬取免费代理ip

访客 代理创业 2021-02-18 17:47:04 18 0 爬走在线代理

python爬虫:爬取免费代理ip

之前写的几个爬虫都只能爬取到少量的信息,这是由于一个ip频繁地访问网站,会被认定为非正常的爬虫从而被屏蔽,这时候就需要使用代理ip来访问网站了,具体方法就是在发送时添加一个参数。代理ip有收费的也有免费的,免费的通常不太稳定,或者根本无法使用。我们的目标是在页面爬取免费代理ip,然后验证代理ip可否使用,最后把相关信息保存到数据库中,不过要经常更新。

以下为需要导入的模块

通过观察页面,每一个代理ip的信息都位于tr标签中,详细信息位于td中

我们的思路是在设计线程中获取tr,然后写一个获取ip信息列表的方法,提取有效信息

()=[](1,len(ip_list)):tds=ip_list[i].find_all('td')ip,port,typ=tds[1].text,int(tds[2].text),tds[5].text.lower()ip_list.append({'ip':ip,'port':port,'typ':typ})returnip_list

此时获取到的ip列表中的ip质量良莠不齐,我们还需要通过此ip访问网络以测试该ip是否可用

defcheck_ip(ip,proxies_list):try:proxy=get_headers_proxy(ip)url='https://www.ipip.net/'r=requests.get(url,headers={'User-Agent':str(UserAgent().random)},proxies=proxy,timeout=5)r.raise_for_status()exceptExceptionase:passelse:proxies_list.append(ip)

其中get_headers_proxy方法获取了消息头中代理的标准写法

defget_headers_proxy(dic):s=dic['typ']+'://'+dic['ip']+':'+str(dic['port'])return{'http':s,'https':s}

然后将这些可用的ip信息存入到数据库中

defsave_mysql(ip_list):conn=pymysql.connect(host='localhost',user='root',passwd='root',db='python',charset=GBK"utf8")cursor=conn.cursor()cursor.execute('SETNAMESutf8;')cursor.execute('SETCHARACTERSETutf8;')cursor.execute('SETcharacter_set_connection=utf8;')foriinrange(len(ip_list)):query="""insertintoproxy_ip(ip,port,typ)values(%s,%s,%s)"""ip=ip_list[i]['ip']port=ip_list[i]['port']typ=ip_list[i]['typ']values=(ip,port,typ)cursor.execute(query,values)cursor.close()conn.commit()conn.close()

接着是自定义的线程类

classGetThread(threading.Thread):def__init__(self,args):threading.Thread.__init__(self,args=args)self.proxies_list=[]defrun(self):url='http://www.xicidaili.com/nn/%d'%self._args[0]user_agent=UserAgent().randomheaders={'User-Agent':user_agent}r=requests.get(url,headers=headers)r.encoding=r.apparent_encodingr.raise_for_status()soup=BeautifulSoup(r.text,'lxml')ip_msg=soup.find_all('tr')[1:]ip_list=parse_msg(ip_msg)threads=[]foripinip_list:t=threading.Thread(target=check_ip,args=[ip,self.proxies_list])t.start()time.sleep(0.1)threads.append(t)[t.join()fortinthreads]defget_proxies_list(self):returnself.proxies_list

完整代码

importpymysqlfromfake_useragentimportUserAgentimportrequestsfrombs4importBeautifulSoupimportthreadingimporttimedefget_headers_proxy(dic):s=dic['typ']+'://'+dic['ip']+':'+str(dic['port'])return{'http':s,'https':s}defparse_msg(ip_list):ip_list=[]foriinrange(1,len(ip_list)):tds=ip_list[i].find_all('td')ip,port,typ=tds[1].text,int(tds[2].text),tds[5].text.lower()ip_list.append({'ip':ip,'port':port,'typ':typ})returnip_listdefcheck_ip(ip,proxies_list):try:proxy=get_headers_proxy(ip)url='https://www.ipip.net/'r=requests.get(url,headers={'User-Agent':str(UserAgent().random)},proxies=proxy,timeout=5)r.raise_for_status()exceptExceptionase:passelse:proxies_list.append(ip)defsave_mysql(ip_list):conn=pymysql.connect(host='localhost',user='root',passwd='root',db='python',charset=GBK"utf8")cursor=conn.cursor()cursor.execute('SETNAMESutf8;')cursor.execute('SETCHARACTERSETutf8;')cursor.execute('SETcharacter_set_connection=utf8;')foriinrange(len(ip_list)):query="""insertintoproxy_ip(ip,port,typ)values(%s,%s,%s)"""ip=ip_list[i]['ip']port=ip_list[i]['port']typ=ip_list[i]['typ']values=(ip,port,typ)cursor.execute(query,values)cursor.close()conn.commit()conn.close()classGetThread(threading.Thread):def__init__(self,args):threading.Thread.__init__(self,args=args)self.proxies_list=[]defrun(self):url='http://www.xicidaili.com/nn/%d'%self._args[0]user_agent=UserAgent().randomheaders={'User-Agent':user_agent}r=requests.get(url,headers=headers)r.encoding=r.apparent_encodingr.raise_for_status()soup=BeautifulSoup(r.text,'lxml')ip_msg=soup.find_all('tr')[1:]ip_list=parse_msg(ip_msg)threads=[]foripinip_list:t=threading.Thread(target=check_ip,args=[ip,self.proxies_list])t.start()time.sleep(0.1)threads.append(t)[t.join()fortinthreads]defget_proxies_list(self):returnself.proxies_listif__name__=='__main__':threads=[]foriinrange(1,50):t=GetThread(args=[i])t.start()time.sleep(3)threads.append(t)[t.join()fortinthreads]fortinthreads:proxies_list=t.get_proxies_list()save_mysql(proxies_list)

运行成果

ps:实测后果然免费的太不稳定了,还是得花钱买

.article_content h3 { font-size: 18px; }

推荐阅读

  • 代理ip爬取和验证 快代理西刺代理
  • python爬取西刺代理网页
  • python爬虫设置动态代理 – Python量化投资
  • scrapy使用代理爬取网站
  • 爬走在线代理 info review pageran爬走在线代理k
  • python爬虫
  • 爬走在线代理
  • python爬虫设置动态代理 – Python量化投资
  • scrapy使用代理爬取网站
  • 代理ip爬取和验证 快代理西刺代理
  • 推荐阅读

    版权声明

    本站所有网络兼职均合法合规,本站所发布的信息均无任何虚假信息,如有发现,欢迎举报!

  • 温馨提示:以任何名义交钱或汇款的是虚假信息,拒绝刷单花呗套现骗局。请您马上举报
  • 本文链接:https://www.ncgqjd.com/218.html