如何使用python 3.5进行抓取时登录网站

时间:2016-06-03 05:45:41

标签: python python-3.x web-scraping robobrowser

我正试图从网站www.vestiairecollective.com抓取数据虽然抓取我只能访问其主页的少数几个。例如,我的脚本无法抓取网址http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3&step=180的数据。

我已经提到了堆栈溢出的许多问题,这些问题说明了如何做到这一点。因为我在Windows上使用python 3.5,“mechanize”和“cookielib”不起作用。我也看到几个问题指出像“robobrowser”这样的图书馆可以完成这项工作。我也试过这个并且卡在中间。

然后我尝试了会话,当我输入request.Sessions()时,它说请求没有一个名为sessions的属性。

当我使用上述网址时,请使用robobrowser或任何其他方式使用此特定网站的代码帮助我。

这是我在提到答案后尝试过的: -

import urllib.request
from bs4 import BeautifulSoup
import requests
session=requests.Session()
loginUrl='http://www.vestiairecollective.com/'
resLogin=session.post(loginUrl,data=  {'h':'5fcdc0ac04537595a747e2830037cca0','email':'something@gmail.com','password':'somepasswrd','ga_client_id':'750706459.1463098234'})
url='http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3'
res=session.get(url)
//The below url i have given because I want to scrape from this url
crl=urllib.request.urlopen("http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3")

soup=BeautifulSoup(crl.read(),"html.parser")

geturl=soup.find_all("div",{"class":"expand-snippet-container"})    

for i in geturl:           //The Scraping Part
    data1=i.find_all("p",{"class":"brand"})
    datac1=[da.contents[0] for da in data1]
    brdata=("\n".join(datac1))
    print(brdata)

这里的抓取应该从“crl”页面完成,但是从主页面本身进行。

1 个答案:

答案 0 :(得分:0)

request.Sessions()中的错误应为request.Session()

我的answer类似问题将提供一些示例代码,用于使用python requests(Python 3)进行持久登录。

简短总结:

  • 使用requests模块创建会话
  • 您可以使用postget参数
  • 登录自己
  • 使用会话对象的进一步请求将适当地处理cookie
  • 确保使用一些真实的用户代理(否则某些网站不会让您登录,因为他们认为您的脚本是机器人)

激励您的一些相关代码行(不按原样运行,您需要根据需要修改这些代码):

import requests
session = requests.Session()
session.headers.update({'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1')
# use the site's form field names for the following line
# (and use the resLogin for checking successful login):
resLogin = session.post(loginUrl, data = {'user' : 'username', 'password' : 'pwd'}) 
# follow-up calls to a session which was used to login
res = session.get(url)