python3爬取豆瓣读书的API报错400,bad request

使用如下python代码读取配置文件中的linkLists(https://api.douban.com/v2/book/1006639),每次爬取到100条左右时就报错bad request

请教各位大神有木有遇到过这种情况,该怎么解决

import json
import pymysql
import random
import time
import urllib
from urllib import request

import doubans.config.linkconfig

conn = pymysql.connect( user="root",password="root",database="python",charset='utf8')
cur = conn.cursor()

def getDetail(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')
try :
res = urllib.request.urlopen(req)
jsondata = res.read().decode("UTF-8")
res.close()
result = json.loads(jsondata)
except urllib.error.URLError as e :
print(e.reason)

if ('title' in result.keys()):
    title = result["title"]
else:
    title = ""

if ('isbn13' in result.keys() and  'ibsn13' != ""):
    isbn = result["isbn13"]
else:
    isbn = result["isbn10"]

l = []
l.append([title,isbn])
sql = "INSERT INTO allbooks values(%s,%s)"
cur.executemany(sql, l)
conn.commit()

for i in range(0,len(doubans.config.linkconfig.linkLists)):
print(doubans.config.linkconfig.linkLists[i])
getDetail(doubans.config.linkconfig.linkLists[i])
time.sleep(int(format(random.randint(0, 9))))

报错信息如下
Traceback (most recent call last):
File "F:/Python/doubans/getDetail.py", line 143, in getDetail(doubans.config.linkconfig.linkLists[i])
File "F:/Python/doubans/getDetail.py", line 27, in getDetail if ('title' in result.keys()): UnboundLocalError: local variable 'result' referenced before assignment
Bad Request

4个回答

你看看是不是可以加个代理ip池,可能会有效果

u014566692
08200307 ok,我下午试试怎么做吧,只是想问一下,403是IP被封,400也是么?为什么换一下IP又可以呢
接近 3 年之前 回复

400是参数错误,看看是不是少传递了什么参数。

u014566692
08200307 回复Q544471255: 应该是限制次数的问题了,间隔时间太长耗费的时间成本有太大,也是悲剧啊
接近 3 年之前 回复
dcxy0
Q544471255 回复08200307: 那可能是豆瓣限制次数了吧,间隔时间长一点试试。
接近 3 年之前 回复
u014566692
08200307 我觉着应该不是参数问题了,因为能算的上参数的就只有linkLists,这个程序也能把拿出来的信息插入到数据库里,只是一次只能处理100个左右,换了ip之后就又可以执行了
接近 3 年之前 回复
dcxy0
Q544471255 可以来群里讨论下爬虫,我也写了一些爬虫,不过都比较简单。
接近 3 年之前 回复

报错,错误信息呢?? 你这让我们怎么帮你?

u014566692
08200307 Traceback (most recent call last): File "F:/Python/doubans/getDetail.py", line 143, in <module> getDetail(doubans.config.linkconfig.linkLists[i]) File "F:/Python/doubans/getDetail.py", line 27, in getDetail if ('title' in result.keys()): UnboundLocalError: local variable 'result' referenced before assignment Bad Request
接近 3 年之前 回复

可能是两种问题,一个是user-agent,一个是IP,不过可以归化为一类问题,就是对方服务器认为你不正常访问了(访问次数太多),这时候切换user-agent可能可以继续爬取,
不行就只能从代理ip池中切换ip代理。
这两个解决方案都在我的博客中有解决方案(含代码),添加到你的项目中去吧。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

Python爬虫爬取豆瓣电影

Python新手,最近学习Python做了一个爬取豆瓣电影的小项目,在爬取导演、主演的时候结果不是理想,请问分别爬取导演、主演的程序怎么写? 下面是网页的程序: <div class="bd"> <p class=""> 导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br> 1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情 </p>

python爬取豆瓣电影 一直报错 求解决

==== RESTART: C:\Users\123\AppData\Local\Programs\Python\Python36\类的学习.py ==== Traceback (most recent call last): File "C:\Users\123\AppData\Local\Programs\Python\Python36\类的学习.py", line 29, in <module> movies_list=get_review(getHtmlText(url)) File "C:\Users\123\AppData\Local\Programs\Python\Python36\类的学习.py", line 20, in get_review dict['name']=tag_li.find('span','titlt')[0].string TypeError: 'NoneType' object is not subscriptable ——代码如下————————————————————————————— import requests from bs4 import BeautifulSoup import bs4 def getHtmlText(url): try: r = requests.get(url, timeout = 30); r.raise_for_status(); r.encoding = r.apparent_encoding; return r.text; except: return "" def get_review(html): movies_list=[] soup=BeautifulSoup(html,"html.parser") soup=soup.find('ol','grid_view') for tag_li in soup.find_all('li'): dict={} dict['rank']=tag_li.find('em').string dict['name']=tag_li.find('span','titlt')[0].string dict['score']=tag_li.find('span','rating_num').string if(tag_li.find('span','inq')): dict['desc']=tag_li.find('span','inq').string movies_list.append(dict) return movies_list if __name__=='__main__': for i in range(10): url='http://movie.douban.com/top250?start=%s&filter=&type=' %(i*25) movies_list=get_review(getHtmlText(url)) for movie_dict in movies_list: print('电影排名:'+movie_dict['rank']) print('电影名称:'+movie_dict.get('name')) print('电影评分:'+movie_dict.get('score')) print('电影评词:'+movie_dict.get('desc','无评词')) print('------------------------------------------------------')

用Python爬取豆瓣电影链接,为何爬下来的链接总是重复出现两次

from urllib.request import urlopen from bs4 import BeautifulSoup import re html = urlopen("https://movie.douban.com/") bsobj = BeautifulSoup(html) for titles in bsobj.findAll("li",{"class":"title"}): print(titles.get_text()) for link in bsobj.findAll("a",href = re.compile("https://movie.douban.com/subject/.*/?from=showing")): if 'href' in link.attrs: print(link.attrs['href']) ``` ``` ![图片说明](https://img-ask.csdn.net/upload/201907/08/1562574134_470876.png)

做了python爬取豆瓣电影程序,但是一直出错

``` import requests import json if __name__ == "__main__": url = 'https://movie.douban.com/j/search_subjects' # 指定URL params = { 'type':'movie', 'tag':'%E5%96%9C%E5%89%A7','sort':'recommend', 'page_limit':'20', 'page_start':'0' } headers = { 'User Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36' } # UA伪装 response = requests.get(url=url, params=params, headers=headers) # get请求 # 获取响应数据 list_data = response.json() fp = open('./douban.json', 'w', encoding='utf-8') json.dump(list_data, fp=fp, ensure_ascii=False) print('保存成功!!!') ```

爬取股票信息,python没报错但不能爬取出结果!急求大神啊!!???

``` # -*- coding: utf-8 -*- from bs4 import BeautifulSoup import traceback import re import time import requests def GetHTMLSource(url): try: r=requests.get(url) r.raise_for_status () r.encoding = r.apparent_encoding return r.text except: print ( "异常" ) return "" def SetFileName(): dirname = time.strftime ( '%Y%m%d' , time.localtime ( time.time () ) ) #获取当前日期 dirname += 'sh' return dirname def getStockList(lst , stock_list_url): # 获得东方财富网上以sh6开头的股票代码 html = GetHTMLSource ( stock_list_url ) soupdata = BeautifulSoup ( html , 'html.parser' ) a = soupdata.find_all ( 'a' ) # 用find_all方法遍历所有'a'标签,并取出在'a'标签里面的’href’数据 for i in a: try: href = i.attrs[ 'href' ] lst.append ( re.findall ( r"sh6d{5}" , href )[ 0 ] ) except: continue def getStockInfo(lst , stock_info_url , fpath): ndate = time.strftime ( '%Y%m%d' , time.localtime ( time.time () ) ) for stock in lst: url = stock_info_url + stock + '.html' html = GetHTMLSource ( url ) try: if html == "": continue infoDict = {} soup = BeautifulSoup ( html, 'html.parser' ) stockInfo = soup.find ( 'div' , attrs={'class': 'stock-bets'} ) if stockInfo == None: continue keyData = stockInfo.find_all ( 'dt' ) valueData = stockInfo.find_all ( 'dd' ) inp = stock + "," + ndate + "," for i in range ( len ( keyData ) ): key = keyData[ i ].text val = valueData[ i ].text infoDict[ key ] = val inp += infoDict[ '最高' ] + "," + infoDict[ '换手率' ] + "," + infoDict[ '成交量' ] + "," + infoDict[ '成交额' ] + "" with open ( fpath , 'a' , encoding='utf-8' ) as f: f.write ( inp ) except: traceback.print_exc () continue def main(): stock_list_url = 'http://quote.eastmoney.com/stocklist.html' stock_info_url = 'https://gupiao.baidu.com/stock/' output_file = 'D://a.txt' slist = [] getStockList(slist,stock_list_url) getStockInfo(slist,stock_info_url,output_file) main() ```

python怎么爬虫豆瓣的短评得分

![图片说明](https://img-ask.csdn.net/upload/201812/01/1543607654_228165.png) 该如何爬去如图所示class的名字呢?(就是每条短评的评分) comment_soup.find_all('span', class_='comment-info')返回的都是none

Python 如何爬取相同url下,多个页面的链接内容

Python 如何爬取相同url下,多个页面的链接内容,最好附代码看下

python 爬虫爬取网易云音乐

刚开始学爬虫,想试着爬取网易云音乐,但是发现好不容易在network里找到网易云里面音乐的url之后,试着去requests获取了一次之后就立马403了,请问有什么办法吗?

python3 爬取https指向的图片链接 问题

初学python爬虫部分,昨天动手做了做爬取网页图片并且下载的小程序。 发现网页中有的图片可以被下载并且保存在本地,有的却不能。 查看了下网页代码原来可以被爬取的是 <img src="http://...jpg|png|gif"> 而不能被爬取的是<input src='https://.......'> 用urllib包好像处理不了 请问如何解决 ---------------------------------------- 附上程序报错提示 Traceback (most recent call last): File "D:\Python34\lib\urllib\request.py", line 1182, in do_open h.request(req.get_method(), req.selector, req.data, headers) File "D:\Python34\lib\http\client.py", line 1088, in request self._send_request(method, url, body, headers) File "D:\Python34\lib\http\client.py", line 1126, in _send_request self.endheaders(body) File "D:\Python34\lib\http\client.py", line 1084, in endheaders self._send_output(message_body) File "D:\Python34\lib\http\client.py", line 922, in _send_output self.send(msg) File "D:\Python34\lib\http\client.py", line 857, in send self.connect() File "D:\Python34\lib\http\client.py", line 1231, in connect server_hostname=server_hostname) File "D:\Python34\lib\ssl.py", line 365, in wrap_socket _context=self) File "D:\Python34\lib\ssl.py", line 583, in __init__ self.do_handshake() File "D:\Python34\lib\ssl.py", line 810, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\py_practice\pachong_rumen_1024.py", line 45, in <module> bytes = urllib.request.urlopen(url); File "D:\Python34\lib\urllib\request.py", line 161, in urlopen return opener.open(url, data, timeout) File "D:\Python34\lib\urllib\request.py", line 463, in open response = self._open(req, data) File "D:\Python34\lib\urllib\request.py", line 481, in _open '_open', req) File "D:\Python34\lib\urllib\request.py", line 441, in _call_chain result = func(*args) File "D:\Python34\lib\urllib\request.py", line 1225, in https_open context=self._context, check_hostname=self._check_hostname) File "D:\Python34\lib\urllib\request.py", line 1184, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)>

Python爬虫爬取新浪微博 使用requests做网页下载器部分

网页下载器模块编写,怎样使用requests模拟登陆新浪微博?

python的爬取html网页错误

``` import requests import xml.etree.ElementTree as ET from xml.parsers.expat import ParserCreate class DefaultSaxHandler(object): def __init__(self, provinces): self.provinces = provinces def start_element(self, name, attrs): pass def end_element(self, name): pass def char_data(self, text): self.provinces.append((text)) def get_province_entry(url): content = requests.get(url).content.decode('gb2312') start = content.find('<table height="22" cellSpacing="0" cellPadding="0" width="710" border="0">') end = content.find('<tr align="middle">') content = content[start:end ].strip() print(content) provinces = [] handler = DefaultSaxHandler(provinces) parser = ParserCreate() parser.StartElementHandler = handler.start_element parser.EndElementHandler = handler.end_element parser.CharacterDataHandler = handler.char_data parser.Parse(content) return provinces provinces = get_province_entry('http://www.ip138.com/post/') print(provinces) ``` 我想问下为什么打印出空值,我觉得是这部分错了,但是说不出哪里错 ``` def char_data(self, text): self.provinces.append((text)) ```

Python requests 爬取网页源码问题

python requests爬取网页内容出现 <html><body><h1>500 Server Error</h1> An internal server error occured. </body></html> 怎么解决

python爬虫爬取网页信息问题

![](https://img-ask.csdn.net/upload/201905/14/1557793745_824662.png)![图片说明](https://img-ask.csdn.net/upload/201905/14/1557793876_298823.png)如图,我要爬取的是两个日期,然后存入csv文件中。如何把这两个日期转成一行输出。

Python爬虫爬取的数据不全

![图片说明](https://img-ask.csdn.net/upload/201707/28/1501209027_991059.png) ``` url='https://www.zhihu.com/people/yang-ze-yong-3/following' page=urllib.request.urlopen(url).read() soup=BeautifulSoup(page) items=soup.find_all('div',{'class':'List-item'}) ``` 结果只返回前3条List-item...新手求助

python 如何爬取url翻页不变的网址

http://mzj.beijing.gov.cn/wssbweb/wssb/dc/searchOrgList.do?action=searchOrgList 我需要爬取这个网站每一家公司的详细信息,我的思路是通过这个主页面爬取所有详情页面的网址,然后再打开详情页面(公司详细信息页面)爬取需要的数据。我现在面临的问题是,这个网址翻页时网址没有发生变化,在网上查了很多方法都没有用,总是重复爬取第一页内容。 求各位大神赐教!! 这是我的代码: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562499974_734961.png)

python flask框架Bad Request问题

from KNN import * from flask import Flask,request,render_template app = Flask(__name__) @app.route('/',methods=['GET','POST']) def home(): return render_template('web.html') @app.route('/training',methods=['GET','POST']) def training(): pos_path = request.form['positivepath'] neg_path = request.form['negativepath'] Precision,A,B,C,D = algorithm() return render_template('result.html',precision=Precision,posright=A,poswrong=B,negright=C,negwrong=D) if __name__ == '__main__': app.run() 代码如上,运行后输入localhost:5000能到达web.html,但是提交表单后无法到result.html页面,总是提示Bad Request The browser (or proxy) sent a request that this server could not understand.

python爬虫爬取腾讯新闻评论

python小白一枚,刚开始学爬虫,遇到一个动态网页爬取问题,请教各位大神。 需要爬取http://view.news.qq.com/original/intouchtoday/n4083.html 这篇新闻的评论内容, ![图片说明](https://img-ask.csdn.net/upload/201711/23/1511415727_305165.jpg) 但是在找到了目标request url: http://coral.qq.com/article/2243032968/comment?commentid=0&reqnum=10&tag=&ca,llback=mainComment&_=1511408574390 ,不知道怎么提取里面的评论内容,且里面的内容类似于\u***这样的乱码

python3爬取的内容可以print但是写入本地文件失败,但测试发现写入语句没有问题

# python3 # 源码如下 ``` python import os # 调用系统变量 import re # 正则表达式相关 import urllib import urllib.request import urllib.error import urllib.parse import json import socket import time class ImoocSpider: headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'} def getPythonInfo(self,keyWord): myKeyWord = urllib.parse.quote(keyWord) searchUrl='https://www.imooc.com/search/?words='+myKeyWord try: request = urllib.request.Request(url=searchUrl, headers=self.headers) page = urllib.request.urlopen(request) rsp = page.read().decode('unicode_escape') except UnicodeDecodeError as e: print(e) print('-----UnicodeDecodeErrorurl:', searchUrl) except urllib.error.URLError as e: print(e) print("-----urlErrorurl:", searchUrl) except socket.timeout as e: print(e) print("-----socket timout:", searchUrl) else: myres=rsp self.saveFile(myres,keyWord) finally: page.close() print("get_finally") def saveFile(self,res,keyWord): b="./" + keyWord +'.txt' if not os.path.exists(b): # 判断路径指定下是否存在文件/文件夹 try : fp=open(b,'w') print(res,file=fp) #print到文件 except : # print (e) print('文件写入有误') finally : fp.close() print('save_finally') def start (self, keyWord): self.getPythonInfo(keyWord) if __name__ == '__main__': imoocInfo = ImoocSpider() imoocInfo.start('python') ```

为什么我用Python抓不到豆瓣电影的信息?

![图片说明](https://img-ask.csdn.net/upload/201911/27/1574851206_817503.png) 如图所示 状态码418是什么啊?

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐