soft-summer-2021 / summer2021

程序设计实践 (2021夏季学期)
34 stars 6 forks source link

今天建立代理ip池突然出现的bug,连文件都没法新建了(貌似只有.py文件不行,.ipynb文件运行没问题) #46

Closed wwt-13 closed 3 years ago

wwt-13 commented 3 years ago

不知道是不是vscode的问题

## 建立ip代理池代码
## 关键看ip_filter函数
import linecache
import random
import time

import requests
from lxml import etree

# 初始化
base_url='https://www.kuaidaili.com/free/inha/{0}/'
fake_headers={"Connection":"close","Accept-Encoding":"gzip, deflate, br","Referer":"https://www.kuaidaili.com/free/inha/"}
s=requests.session()
requests.adapters.DEFAULT_RETRIES = 5
# 设置重连接次数
# 利用session保存cookies,关闭多余连接
# cookie不到万不得已不用,因为使用selenium获取cookie的方法实在是太慢了

def headers_update():
    a = random.randint(1,10036)
    user_agent = linecache.getline(r'C:\Users\86188\Desktop\商场网站\火车余票查询+提醒\user_agent_set.txt', a).strip('\n')
    fake_headers['User-Agent']=user_agent
def get_ip(base_url,page,headers):
    # 每获取一页刷新一次headers
    # 这是https://www.kuaidaili.com/free/inha/ 网站的免费代理ip下载
    # 传入url:https://www.kuaidaili.com/free/inha/{0}/
    url=base_url.format(page)
    res=requests.get(url,headers)
    con=res.content.decode('utf-8')
    if res.status_code==200:
        html=etree.HTML(con)
        ip_list=html.xpath("//td[@data-title='IP']/text()")
        port_list=html.xpath("//td[@data-title='PORT']/text()")
        print(ip_list)
        print(port_list)
        return [ip+':'+port for ip,port in zip(ip_list,port_list)]
    else:
        print("ERROR:或许是爬取过于频繁导致ip被封")
def ip_filter(result): # 筛选可用ip
    myfile=open("ip.txt","a+",encoding='utf-8') # 这里
    for ip in result:
        myfile.write(ip)
        # print(ip)
        proxies = {'http': 'http://{ip}'.format(ip=ip)}
        # 两种访问模式
        try:
            time.sleep(1)
            print('本次测试的ip是{0}'.format(ip))
            s.keep_alive=False
            res=s.get("https://www.baidu.com/",headers=fake_headers,timeout=8,proxies=proxies)
            if res.status_code==200:
                # con=res.content.decode(res.apparent_encoding)
                # html=etree.HTML(con)
                # print(html.xpath('//title/text()')[0])
                myfile.write(ip) # 还有这里
            else:
                print('代理ip({0})无效'.format(ip))
        except Exception as e:
            print(e)
    myfile.close()
for page in range(1,200,1): # 先爬取200页吧
    try:
        headers_update()
        temp_ip_set=get_ip(base_url,page,fake_headers)
        print('代理ip第{0}页爬取成功'.format(page))
        ip_filter(temp_ip_set)
        print('代理ip第{0}页写入成功'.format(page))
    except Exception as e:
        print(e)

更离谱的是这样也无法新建文件

f=open("ip.txt","w")
f.close()
dyn1721 commented 3 years ago

控制台没有报错?

wwt-13 commented 3 years ago

控制台没报错,运行的很正常 现在我发现就是.py无法执行文件相关操作,但.ipynb却可以(具体入下图) .py文件 QQ图片20210826094411 运行后无变化,无报错 QQ图片20210826094427 .ipynb文件 QQ图片20210826094431 运行成功 QQ图片20210826094437

dyn1721 commented 3 years ago

新建个文件或者项目再试试? 还真没听说过这种情况。。