1。遇到的418错误(i am teapot):
如果你也变成一个茶壶,那应该是被服务器认出来了。可以输入
test1=urllib.request.urlopen('http://httpbin.org/get')
print(test1.read().decode('utf-8'))
能看到"User-Agent": "Python-urllib/3.8", 这样一句,这个是浏览器信息,如果不修改,默认就是Python-urllib/3.8这种类型的,网页就会识别这是一个爬虫,禁止访问。
解决办法:伪装成一个浏览器。在
urllib.request.Request函数中填入headers信息,可以在Google浏览器f12查询到。
进入网站后按f12调出控制台,刷新网页,在network中可以找到
然后添加到
head ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'}
一定要以键值对的形式存下来,之后就完美解决了。
2.403错误(拒绝访问):
emmm,今天上午爬的还好好的,晚上回来看就出现这个错误了,然后用浏览器试了一下,需要登录账号了,本来以为没什么的,去百度,说是ip给禁止了,我尝试改了ip之后还是不行,后来想起之前看过一个爬虫需要添加cookie,试了试还真成功了。可能有cookie还是403才是ip被禁止了吧,啊,获取cookie的方式还是在f12控制台里,先打开控制台,然后登录就会有账号的cookie的信息,复制粘到head里面就好了。
3.认证错误
刚学了一点就去找了一些不那么正规的某网站试了一下,发现报了一个认证错误,好像python我也不知道哪个版本更新之后爬网站的时候就会验证证书,百度了一下
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
在开头加上两条语句就可以跳过验证了,emmm也算是知识点吧,源代码如下
#coding=utf-8
import urllib
import ssl
import urllib.request
#主函数
from random import random
ssl._create_default_https_context = ssl._create_unverified_context
def main():
getData(r'https://movie.douban.com/top250?start=')
print()
#爬取网页
def getData(baseurl):
datalist=[]
for i in range(0,10):
url=baseurl+str(i*25)
html=askUrl(url)
return datalist
#逐一解析数据
#得到一个指定的网页
def askUrl(url):
cookie='douban-fav-remind=1; bid=IM6QZAEWNkU; __gads=ID=b3667ebfb3086c54-22ce5d247ace00ae:T=1635768277:RT=1635768277:S=ALNI_MaFUrUH5GdH5yRDF8sntFakZzfoxA; ll="118099"; dbcl2="249424718:lRJDEBNBXGU"; ck=3B-d; push_noty_num=0; push_doumail_num=0; __utmc=30149280; __utmv=30149280.24942; __utmz=30149280.1635856340.10.5.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmc=223695111; __utmz=223695111.1635856340.3.3.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; ct=y; __utma=30149280.2076435049.1583424463.1635856340.1635859463.11; __utmb=30149280.0.10.1635859463; __utma=223695111.723663293.1635768348.1635856340.1635859463.4; __utmb=223695111.0.10.1635859463; _pk_ref.100001.4cf6=["","",1635859463,"https://www.baidu.com/link?url=9GCf5NWMM252Sfwiz-JPjoVL0vOlv3NYkB3E6Y1oAVEOPdhJwCaaK1mkk0QAaE2f&wd=&eqid=96e7981700273cb20000000361812f4c"]; _pk_ses.100001.4cf6=*; _pk_id.100001.4cf6=e50b460db0a3a2d3.1635768348.4.1635860015.1635857078.'
head ={'Cookie': cookie,
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'}
response=urllib.request.Request(url,headers=head)
html=''
try:
response=urllib.request.urlopen(response)
html=response.read().decode('utf-8')
print(html)
except urllib.error.URLError as e:
if hasattr(e,'code'):
print(e.code)
if hasattr(e,'reason'):
print(e.reason)
return html
#保存数据
def saveData(savapath):
print('还没写好')
if __name__=='__main__':#当程序执行时
main()
总结:head里面的记得要自己改一下哈,上面都写了在哪,楼主很菜,只是记录一下今天学到的,欢迎大佬们指教哈,是跟着小破站免费视屏学到的,IT私塾可以去搜索一下,以后不出意外都是跟着这个自学的。