鱼C论坛

 找回密码
 立即注册
查看: 2577|回复: 18

[作品展示] 新手写的一个自动爬取代理IP,并测试传入Mysql数据库的代码

[复制链接]
发表于 2018-1-10 01:46:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import re
  2. import urllib.request
  3. from bs4 import BeautifulSoup
  4. import os
  5. import socket
  6. import pymysql

  7. class GetProxy:
  8.       
  9.     def __init__(self):
  10.         self.IPlist=[]
  11.         self.url="http://www.xicidaili.com/nn"
  12.         self.proxy_from_xici()

  13.    
  14.     def open_page(self):
  15.         req=urllib.request.Request(self.url,None,headers)
  16.         response=urllib.request.urlopen(req)
  17.         html=response.read()
  18.         return html
  19.    
  20.     def proxy_from_xici(self):        
  21.         html=BeautifulSoup(self.open_page(),"html.parser")
  22.         ips=html.findAll("tr")
  23.         for each in range(1,len(ips)):
  24.             try:
  25.                 tds=ips[each].findAll("td")
  26.                 self.IPlist.append([tds[1].text,tds[2].text,tds[5].text])   
  27.             except:
  28.                 continue

  29. class TestProxy:
  30.     def __init__(self):
  31.         self.test()

  32.     def test(self):
  33.         if ip_type=="HTTP":
  34.             proxy_host="http://"+ip+":"+port
  35.             proxy_temp={"http":proxy_host}
  36.         else:
  37.             proxy_host="https://"+ip+":"+port
  38.             proxy_temp={"https":proxy_host}
  39.         proxy_support=urllib.request.ProxyHandler(proxy_temp)
  40.         opener=urllib.request.build_opener(proxy_support)
  41.         urllib.request.install_opener(opener)
  42.         try:
  43.             req=urllib.request.Request("http://www.symmz.com/xiaoqingxin.html",None,headers)
  44.             response=urllib.request.urlopen(req)
  45.         except:
  46.             print(proxy_host+"无法登陆")
  47.             return
  48.         else:
  49.             print(proxy_host+"可以登陆")
  50.             Proxy_list.append(proxy_temp)
  51.             

  52.             
  53. class save_to_mysql:
  54.     def __init__(self):
  55.         self.conn=pymysql.connect(host="127.0.0.1",user="root",passwd="123456",db="mysql")
  56.         self.cur=self.conn.cursor()
  57.         self.cur.execute("USE scraping")


  58.     def save(self):
  59.         self.cur.execute("INSERT INTO proxys_list (PROXY) VALUES (%s)",str((each)))
  60.         self.cur.connection.commit()
  61.     def close(self):
  62.         self.cur.close()
  63.         self.conn.close()


  64.    

  65. if __name__ == "__main__":

  66.     headers={}
  67.     headers["User-Agent"]="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

  68.     socket.setdefaulttimeout(3)
  69.    
  70.     Proxy_list=[]
  71.     one=GetProxy()
  72.     for ip,port,ip_type in one.IPlist:
  73.         two=TestProxy()
  74.     three=save_to_mysql()
  75.     for each in Proxy_list:
  76.         three.save()
  77.     three.close()
  78.     print("存入数据库完成")
复制代码
   
第一次发这种帖子,如果代码有什么可以完善的地方,可以告诉小弟,改进改进

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
小甲鱼 + 5 + 5 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-10 01:48:29 | 显示全部楼层
这里面的mysql的数据表和字段我是提前创建好的,代码里面没有写创建的部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 04:06:30 | 显示全部楼层
枫树霜雪 发表于 2018-1-10 01:48
这里面的mysql的数据表和字段我是提前创建好的,代码里面没有写创建的部分

不错,干货!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 07:49:22 From FishC Mobile | 显示全部楼层
'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 08:43:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 09:10:37 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 10:38:12 | 显示全部楼层
45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-10 14:08:11 | 显示全部楼层

谢谢大佬鼓励
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 14:08:49 | 显示全部楼层
http://bbs.fishc.com/thread-102928-1-1.html 这个链接是如何使用数据库内的代理,爬取图片的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 17:08:36 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 18:49:55 | 显示全部楼层
围观
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 18:58:52 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 19:17:07 | 显示全部楼层
有个不懂的地方
  1. for ip,port,ip_type in one.IPlist:
  2.         two=TestProxy()
  3.     three=save_to_mysql()
  4.     for each in Proxy_list:
  5.         three.save()
复制代码
这个TestProxy类是怎么可以获取到 for 中的ip等元素的,没有参数传递啊,返回给Proxy_list 也是的。。。不太明白请教一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 19:43:38 | 显示全部楼层
mintaka 发表于 2018-1-10 19:17
有个不懂的地方
这个TestProxy类是怎么可以获取到 for 中的ip等元素的,没有参数传递啊,返回给Proxy_list ...

类里面如果不设置传入参数的话,会自动优先调用全局变量,同名的变量就在for循环里面,所以会直接调用,如果写严谨一些是应该要分开的,不然有同名的变量话会乱的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 20:01:10 | 显示全部楼层
枫树霜雪 发表于 2018-1-10 19:43
类里面如果不设置传入参数的话,会自动优先调用全局变量,同名的变量就在for循环里面,所以会直接调用, ...

好吧,写习惯C,不太适应python,就是说如果如果类里没有这个参数的话就会自己找到同名的是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 20:14:31 | 显示全部楼层
mintaka 发表于 2018-1-10 20:01
好吧,写习惯C,不太适应python,就是说如果如果类里没有这个参数的话就会自己找到同名的是吧

不是的,就算类里面有同名的,也是优先调用全局变量,然后才是类里面的局部变量的
  1. class Test:
  2.     a=1   
  3.     def run():
  4.         print(a)

  5. a=2
  6. b=Test
  7. b.run()
复制代码
这样出来的结果也是2,并不是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 20:26:36 | 显示全部楼层
枫树霜雪 发表于 2018-1-10 20:14
不是的,就算类里面有同名的,也是优先调用全局变量,然后才是类里面的局部变量的这样出来的结果也是2, ...

了解了,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 20:33:13 | 显示全部楼层

不客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 11:12:11 | 显示全部楼层
KANKAN
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表