Python 处理请求模块时出现错误消息10054

Python 处理请求模块时出现错误消息10054,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,新来的程序员。在我学习python的时候,我尝试浏览pof网站。试着用请求和美味的汤来拉屎。提前谢谢 错误似乎来自行res=requests.get(“”%pageId) 我试图删除分页页,只刮一页,但没有成功 还尝试在每个请求之间使用time.sleep 3秒,但也不起作用 #Username and password username='MyUsername' password='MyPassword' #Login to pof site from selenium import w

新来的程序员。在我学习python的时候,我尝试浏览pof网站。试着用请求和美味的汤来拉屎。提前谢谢

错误似乎来自行res=requests.get(“”%pageId)

我试图删除分页页,只刮一页,但没有成功 还尝试在每个请求之间使用time.sleep 3秒,但也不起作用

#Username and password 
username='MyUsername'
password='MyPassword'


#Login to pof site
from selenium import webdriver
import bs4,requests
browser = webdriver.Chrome(executable_path='/Users/Desktop/geckodriver-v0.24.0-win32/chromedriver.exe')
browser.get('https://www.pof.com')
linkElem= browser.find_element_by_link_text('Sign In')
linkElem.click()
usernameElem=browser.find_element_by_id('logincontrol_username')
usernameElem.send_keys(username)
passwordElem=browser.find_element_by_id('logincontrol_password')
passwordElem.send_keys(password)
passwordElem.submit()

#Webscraping online profile links from first 7 pagination pages
for pageId in range(7):
    res=requests.get('https://www.pof.com/everyoneonline.aspx?page_id=%s' %pageId)
    res.raise_for_status()
    soup= bs4.BeautifulSoup(res.text)
    profile = soup.findAll('div', attrs={'class' : 'rc'})
    for div in profile:
        print (div.findAll('a')['href'])
预期结果: 打印配置文件的所有href链接列表,以便稍后将其保存到csv

实际结果:
requests.exceptions.ConnectionError:('Connection aborted',ConnectionResetError(10054',现有连接被远程主机强制关闭',None,10054,None))
在此处输入代码

我将在抓取网页时为您提供一些常规信息:

  • 首先,不要将请求与selenium一起使用!根据我的经验,90%的情况下,请求是最快、最简单的解决方案
  • 始终尝试为您的请求提供标题。不提供标题会导致网页可疑,甚至可能会阻止您的所有请求(您收到的错误可能就是因为这个!)
  • 对于网页的后续请求,使用会话!,这样,您的cookies就可以存储起来,并且您实际上可以长时间访问登录页面
  • 这一个更客观,但是如果您已经知道regex,我建议使用
    re
    模块
    BeautifulSoup
    很棒,但就一般用途而言,
    re
    就我的经验而言更简单
  • 现在回答你的问题;有很多不同的网页,但我建议从所有网页中删除:

    提取数据~
    标题数据
    • 使用inspect element支持打开常用浏览器。转到您试图从中刮取的网页并打开inspect element dock
    • 进入
      网络
      部分。在这里,您可以看到浏览器发出的所有请求,以及标题和源
    • 发出您想要模拟的请求,跟踪网络选项卡,转到包含所需
      GET
      的请求,或者在您的情况下转到
      POST
      方法
    • 复制该特定请求的请求头。您不需要所有这些参数(例如,cookie参数将由会话添加,因此本例中不需要该参数;也不需要以
      开头的标题,如
      :method:POST
    • 将复制的标题从浏览器放到python dict中,下面是来自此网页的示例:
    标题={
    “接受”:“应用程序/json,文本/javascript,*/*;q=0.01”,
    “接受编码”:“gzip,deflate,br”,
    “接受语言”:“en-US,en;q=0.9,fa-IR;q=0.8,fa;q=0.7,de;q=0.6”,
    “内容类型”:“application/x-www-form-urlencoded;charset=UTF-8”,
    “dnt”:“1”,
    “来源”:https://stackoverflow.com",
    “推荐人”:https://stackoverflow.com/questions/56399462/error-message-10054-when-wescraping-with-requests-module",
    “用户代理”:“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)snap Chrome/74.0.3729.169 Chrome/74.0.3729.169 Safari/537.36”,
    }
    
    发布数据
    • 如果您想发出post请求,则在请求的
      标题
      部分应该有另一个部分,命名为“Payload”或“formdata”。将其内容放在另一个python dict中,并根据需要更改其内容
    使用数据~
    现在,您可以将提取的数据用于python请求,然后在响应内容上使用
    re
    BeautifulSoup
    来提取所需的数据。
    在本例中,我登录到
    试着按照我写的步骤来理解这里发生的事情:

    导入请求
    username=“某物”
    password=“somethingelse”
    标题={
    “接受”:“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed exchange;v=b3”,
    “接受编码”:“gzip,deflate,br”,
    “缓存控制”:“最大年龄=0”,
    “内容类型”:“应用程序/x-www-form-urlencoded”,
    “dnt”:“1”,
    “来源”:https://aavtrain.com",
    “推荐人”:https://aavtrain.com/index.asp",
    “升级不安全请求”:“1”,
    “用户代理”:“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)snap Chrome/74.0.3729.169 Chrome/74.0.3729.169 Safari/537.36”
    }
    数据={
    “用户名”:用户名,
    “密码”:密码,
    “提交”:“提交”,
    “登录”:“真”
    }
    将requests.Session()作为会话:
    会话。获取(“https://aavtrain.com/index.asp")
    loggedIn=session.post(“https://aavtrain.com/index.asp,标题=标题,数据=数据)
    #... 登录后做一些事情。。
    

    我希望这会有所帮助,如果您有任何疑问,我会回复您。

    您正在使用……请求和selenium?通常,您希望使用其中一种,因为请求模块不会“看到”selenium连接。在这种情况下,很可能页面正在识别来自IP的两个并发连接,并强制关闭一个或两个连接,因此“现有连接被远程主机强制关闭”