如何解决使用scrapy和pyquery登录到Stackoverflow,但无法进行进一步的剪贴
我目前正在使用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_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]>
因此,如何获得整个html页面数据的响应,以便可以抓取更多问题/数据。解析功能也可以使用,但是只能打开stackoverflow登录页面。
解决方法
似乎您正在使用Requests库进行最终的POST请求。从requests.post()
返回的响应将以多种方式使响应的主体可用。请参阅:https://requests.readthedocs.io/en/master/user/quickstart/#response-content。您应该通过response.status_code
检查响应代码的2XX值。这样做的快捷方式是仅检查response.ok
。完成后,您可以将响应正文作为文本获取:
response.text
如果您希望网页(HTML)回来,这就是您想要的。
如果返回JSON,则可以通过以下方式从JSON扩展结果数据结构:
response.json
如果您不确定会返回什么,请检查Content-Type
标头值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。