Python 使用scrapy和pyquery登录到Stackoverflow,但无法执行进一步的刮取
我目前正在学习使用scrapy进行网页抓取,并尝试/学习各种方法登录stackoverflow,然后提取一些问题用于练习网页抓取。我已使用以下代码使用scrapy和pyquery成功登录stackoverflow:Python 使用scrapy和pyquery登录到Stackoverflow,但无法执行进一步的刮取,python,scrapy,stackexchange,Python,Scrapy,Stackexchange,我目前正在学习使用scrapy进行网页抓取,并尝试/学习各种方法登录stackoverflow,然后提取一些问题用于练习网页抓取。我已使用以下代码使用scrapy和pyquery成功登录stackoverflow: import scrapy import requests import getpass from pyquery import PyQuery from scrapy import FormRequest from scrapy.utils.response import open
import scrapy
import requests
import getpass
from pyquery import PyQuery
from scrapy import FormRequest
from scrapy.utils.response import open_in_browser
class QuoteSpider(scrapy.Spider):
name = 'stackoverflow'
start_urls = ['https://stackoverflow.com/users/login']
# def login_page(self):
# Fetch the fkey
login_page = requests.get(start_urls[0]).text
pq = PyQuery(login_page)
fkey = pq('input[name="fkey"]').val()
# Prompt for email and password
email = input("Email: ")
password = getpass.getpass()
# Login
response = requests.post(
start_urls[0],
data = {
'email': email,
'password': password,
'fkey': fkey
})
print(response)
def parse(self, response):
open_in_browser(response)
def get_questions_link(self):
pass
但作为响应,它仅使用以下命令运行,给我成功状态代码,即200:
scrapy crawl stackoverflow -L WARN
Email: test@gmail.com
Password:
<Response [200]>
scrapy crawl堆栈溢出-L警告
电邮:test@gmail.com
密码:
那么,我怎样才能得到整个html页面数据的响应,这样我就可以获得更多的问题/数据。解析函数也在工作,但它只是打开stackoverflow登录页面。看起来您正在使用请求库来完成最后的POST请求。从
requests.post()返回的响应将以多种方式提供响应的主体。请参阅:。您应该通过response.status\u code
检查响应代码的2XX值。一个快捷方式是只需检查response.ok
。完成此操作后,可以将响应正文作为文本:
response.text
如果您希望返回一个网页(HTML),那么这就是您想要的
如果返回JSON,则可以通过以下方式从该JSON扩展生成的数据结构:
response.json
如果您不确定将返回什么内容,请检查内容类型
标题值。看起来您正在使用请求库处理您正在发出的最终POST请求。从requests.post()返回的响应将以多种方式提供响应的主体。请参阅:。您应该通过response.status\u code
检查响应代码的2XX值。一个快捷方式是只需检查response.ok
。完成此操作后,可以将响应正文作为文本:
response.text
如果您希望返回一个网页(HTML),那么这就是您想要的
如果返回JSON,则可以通过以下方式从该JSON扩展生成的数据结构:
response.json
如果您不确定将返回什么,请检查内容类型
标题值