首页 > 解决方案 > 404:[33mGET /search?q=books HTTP/1.1[0m”404 -

问题描述

我是网络抓取和制作 API 的新手,在抓取电子商务网站时遇到错误。下面是我的 python 代码,请指导我完成相同的操作,我得到“在服务器上找不到请求的 URL。” 在本地主机上运行时。

from flask import Flask , request , jsonify
from bs4 import BeautifulSoup
import requests

app = Flask(__name__)


@app.route('/',methods=['GET'])
def API():
    if request.method == 'GET':
        uri = 'https://www.flipkart.com'
        query = str(request.args['query'])
        print(query)
        if " " in query:
            query = str(query).replace(" ","+")
        else:
            pass

        search = '/search?q=' + query

        ready_uri = uri + search
        print(ready_uri)
        content = requests.get(ready_uri).content
        soup = BeautifulSoup(content, 'html.parser')
        quotes_links = soup.find_all('a', {'class': '_3O0U0u'})
        l = []
        for i in quotes_links:
            d = {}
            quote_url = uri + i.get('href')
            quote_content = requests.get(quote_url).content
            quote_soup = BeautifulSoup(quote_content, 'html.parser')
            d['quote'] = quote_soup.find('p', {'class': '_3wU53n'}).text
            d['author'] = quote_soup.find('p', {'class': '_1vC4OE _2rQ-NK'}).text
            l.append(d)


        return jsonify(l)


if __name__ == '__main__':
    app.run()

错误:

[33mGET /search?q=books HTTP/1.1[0m" 404 -

标签: pythonapiflask

解决方案


如何在 Flask 上获取查询字符串?

您似乎错误地获取了查询参数。

query = str(request.args['query'])

什么时候应该:

query = str(request.args.get('query'))

这样做会返回 200 但有空白数据。我建议查看您的抓取元素:

quotes_links = soup.find_all('a', {'class': '_3O0U0u'})

一旦你用汤获得了正确的元素,你应该开始看到返回数据。


推荐阅读