python - 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 -
解决方案
您似乎错误地获取了查询参数。
query = str(request.args['query'])
什么时候应该:
query = str(request.args.get('query'))
这样做会返回 200 但有空白数据。我建议查看您的抓取元素:
quotes_links = soup.find_all('a', {'class': '_3O0U0u'})
一旦你用汤获得了正确的元素,你应该开始看到返回数据。
推荐阅读
- php - Imagick 'getImageGeometry' 正在读取肖像图像作为风景 - PHP?
- facebook - 检查 Facebook 应用程序是否仍在运行(没有 Facebook 帐户)
- bit-manipulation - 使用按位运算检测多字节字中的 0xff
- python - 消息:未知错误:Chrome 无法启动:在使用 Linux 4.9.85-38.58.amzn1.x86_64 x86_64 的 AWS Cloud9 上异常退出
- python-3.x - Keras+Tensorflow 中的混淆矩阵
- c# - LINQ 性能:对于 C# 6 中与 LINQ 的区别?
- javascript - 如何使用数组仅更新 MongoDB 数据库中对象的某些属性
- java - 将文件从 java 发送到 Angular 是畸形/编码数据
- javascript - 如何将代码从 Angular 1.5 更新到 Angular 5?
- javascript - CSS 动画残留像素片段