准备工作
需要requests、csv、random、time、socket、http.client、pymysql、cookielib库文件
其中需要下载的有PyMySQL、requests可以使用pip命令安装,如下所示:
pip install PyMySQL
pip install requests
也可以使用pycharm的Project Interpreter功能(在file->default setting,选中你的project interpreter点击下方的加号搜索这些库文件即可)安装这些库文件
分析并找到爬取地址
我们的目的是爬取知乎用户的用户信息,包括名称、性别、学历、工作地点等以便分析,在知乎用户的用户首页上我们便能可以得到这些信息,那么现在我们就来找到知乎服务器返回给本地浏览器的数据来源是哪里,通过在chrome浏览器开发者工具下的network栏中可以看到有以下内容。
一般来说服务器返回给本地浏览器的数据为JSON格式,在preview栏中可以很清楚的看到该用户的用户数据,如下:
所以这个请求网址便是我们需要爬取的url地址,我们从headers获取到request url以及request headers。
正式开始
从我们需要爬取的地址信息可以看到,我们需要使用http的get方式。所以我们直接通过requests.get(url,headers)便可以获取到url的响应信息,在对可能出现的一些异常进行捕捉和处理,方便连续爬取,具体代码如下:
def get_content(url):
timeout = random.choice(range(80,180))
while True:
try:
response = requests.get(url, headers =headers, timeout = timeout)
status = response.status_code
#print(status)
break
except socket.timeout as e:
print("3:",e)
time.sleep(random.choice(range(8,15)))
except socket.error as e:
print("4:",e)
time.sleep(random.choice(range(20,60)))
except http.client.BadStatusLine as e:
print("S:",e)
time.sleep(random.choice(range(30,80)))
except http.client.IncompleteRead as e:
print("6:",e)
time.sleep(random.choice(range(5,15)))
if status is