使用如下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
你看看是不是可以加个代理ip池,可能会有效果
400是参数错误,看看是不是少传递了什么参数。
报错,错误信息呢?? 你这让我们怎么帮你?
可能是两种问题,一个是user-agent,一个是IP,不过可以归化为一类问题,就是对方服务器认为你不正常访问了(访问次数太多),这时候切换user-agent可能可以继续爬取,
不行就只能从代理ip池中切换ip代理。
这两个解决方案都在我的博客中有解决方案(含代码),添加到你的项目中去吧。