使用scrapy模拟登陆大众点评网
时间: 2023-05-23 20:04:59 浏览: 263
Python爬虫之模拟登陆
A:使用scrapy模拟登陆大众点评网的步骤如下:
1. 在settings.py中添加COOKIES_ENABLED=True,开启cookies支持;
2. 在spider中编写start_requests方法,发送GET请求到大众点评的登录页面,获取登录页面的cookie;
3. 编写parse方法,解析登录页面的源代码,提取出登录时需要的参数、加密token等信息;
4. 编写一个登录方法,使用加密token和传递用户名和密码设置POST请求,将用户凭证提交到登录页面;
5. 再次编写parse方法,使用selenium打开登录页面,成功登录后,提取响应页面的cookie;
6. 在后续的请求中使用该cookie,以保持用户的登录状态。
具体实现代码如下:
```python
import scrapy
from scrapy.http import FormRequest
from selenium import webdriver
class DianPing(scrapy.Spider):
name = 'dianping'
allowed_domains = ['www.dianping.com']
start_urls = ['https://account.dianping.com/login']
def start_requests(self):
yield scrapy.Request(url=self.start_urls[0], callback=self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5},
},
'selenium': True
})
def parse(self, response):
# 获取cookie
cookie = response.headers.getlist('Set-Cookie')
cookie = [c.decode('utf-8').split(';')[0] for c in cookie]
cookie = '; '.join(cookie)
# 获取加密token
token = response.css('input[name="token"]::attr(value)').extract_first()
# 提交登录请求
yield FormRequest.from_response(response,
formdata={
'account': 'your_username',
'password': 'your_password',
'token': token,
'redir': 'https://www.dianping.com',
'rememberMe': 'true',
},
headers={
'Cookie': cookie,
},
callback=self.after_login,
meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5},
},
'selenium': True
})
def after_login(self, response):
# 使用selenium打开登录页面,获取cookie
if '登录' not in response.body.decode('utf-8'):
driver = response.meta['driver']
driver.get(response.url)
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
yield scrapy.Request(
url='https://www.dianping.com/',
cookies=cookie_dict,
callback=self.parse_homepage,
meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5},
}
}
)
def parse_homepage(self, response):
print(response.body)
```
上述代码中,我们通过在start_requests的meta中添加了splash和selenium参数,使得start_requests方法使用splash和selenium的渲染能力来处理请求。在parse方法中,我们获取了登录页面的cookie和加密token,并设置了POST请求,将用户凭证提交到登录页面。在after_login方法中,我们使用selenium打开登录页面,并在parse_homepage方法中解析响应页面的源代码。最后,在后续的请求中使用获取到的cookie即可保持用户的登录状态。
阅读全文