python - 如何在scrapy中带cookie访问?
高洛峰
高洛峰 2017-04-18 10:24:03
0
2
675

简单的通过scrapy访问雪球都报错,我知道要先访问一次雪球,需要cookie信息才能真正打开连接。scrapy据说可以不用在意cookie,会自动获取cookie。我按照这个连接在middleware里已经启用cookie,http://stackoverflow.com/ques...,但为什么还是会返回404错误?搜索了几天都没找到答案。郁闷啊,求帮忙给个简单代码如何访问,谢谢了





class XueqiuSpider(scrapy.Spider):
    name = "xueqiu"
    start_urls = "https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=1&size=1"
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8",
        "Connection": "keep-alive",
        "Host": "www.zhihu.com",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"
    }


    def __init__(self, url = None):
        self.user_url = url

    def start_requests(self):
        yield scrapy.Request(
            url = self.start_urls,
            headers = self.headers,
            meta = {
                'cookiejar': 1
            },
            callback = self.request_captcha
        )

    def request_captcha(self,response):
        print response

错误日志。

2017-03-04 12:42:02 [scrapy.core.engine] INFO: Spider opened
2017-03-04 12:42:02 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-03-04 12:42:02 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
********Current UserAgent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6************
2017-03-04 12:42:12 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: <200 https://xueqiu.com/robots.txt>
Set-Cookie: aliyungf_tc=AQAAAGFYbBEUVAQAPSHDc8pHhpYZKUem; Path=/; HttpOnly

2017-03-04 12:42:12 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://xueqiu.com/robots.txt> (referer: None)
********Current UserAgent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6************
2017-03-04 12:42:12 [scrapy.downloadermiddlewares.cookies] DEBUG: Received cookies from: <404 https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=1&size=1>
Set-Cookie: aliyungf_tc=AQAAAPTfyyJNdQUAPSHDc8KmCkY5slST; Path=/; HttpOnly

2017-03-04 12:42:12 [scrapy.core.engine] DEBUG: Crawled (404) <GET https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=1&size=1> (referer: None)
2017-03-04 12:42:12 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <404 https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=1&size=1>: HTTP status code is not handled or not allowed
2017-03-04 12:42:12 [scrapy.core.engine] INFO: Closing spider (finished)
2017-03-04 12:42:12 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
Ty80

Je l'ai réessayé.. Vous n'avez vraiment pas besoin de vous connecter.. J'y réfléchis trop... Demandez simplement à xueqiu.com d'abord, puis demandez l'adresse API après avoir obtenu le cookie.. C'est tout. .

==============La ligne de démarcation de la honte==============

Comme vérifié par moi, vous devez vous connecter...

import scrapy
import hashlib
from scrapy.http import FormRequest, Request

class XueqiuScrapeSpider(scrapy.Spider):
    name = "xueqiu_scrape"
    allowed_domains = ["xueqiu.com"]

    def start_requests(self):
        m = hashlib.md5()
        m.update(b"your password")  # 在这里填入你的密码
        password = m.hexdigest().upper()
        form_data={
            "telephone": "your account",   # 在这里填入你的用户名
            "password": password,
            "remember_me": str(),
            "areacode": "86",
        }
        print(form_data)
        return [FormRequest(
            url="https://xueqiu.com/snowman/login", 
            formdata=form_data, 
            meta={"cookiejar": 1},
            callback=self.loged_in
            )]

    def loged_in(self, response):
        # print(response.url)
        return [Request(
            url="https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=1&size=1",
            meta={"cookiejar": response.meta["cookiejar"]},
            callback=self.get_result,
            )]

    def get_result(self, response):
        print(response.body)

De plus, le site Web a effectivement été vérifié User-Agent et peut être défini dans settings.py. Bien sûr, vous pouvez également l'écrire vous-même dans le fichier du robot. Le mot de passe est une chaîne cryptée MD5.
Oh, oui, encore une chose, car je me suis inscrit avec mon téléphone portable, form_data sont ces champs. Si vous utilisez d'autres méthodes, il vous suffit d'utiliser l'outil Chrome pour voir les paramètres de la requête POST et les modifier. faites-le vous-même form_data Le contenu ira bien.

黄舟

Haha, merci, cela a résolu la confusion pendant quelques jours. Avant, je le faisais par demande, pas besoin de me connecter, de poster le code,

session = requests.Session()
session.headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
session.get('https://xueqiu.com')
for page in range(1,100):
    url = 'https://xueqiu.com/stock/f10/finmainindex.json?symbol=SZ000001&page=%s&size=1' % page
    print url
    r = session.get(url)
#print r.json().list
    a = r.text
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal