爬虫实例2:手动设置cookie 爬取知乎50条热搜 利用base64库将每一条热搜新闻上的图片内容编码成base64编码

设置cookie:手动设置cookie值的方式有两种 一种通过往请求头headers里面添加cookie 另一种通过cookiejar设置cookie值 本文采取往请求头headers里面添加cookie

1-构造请求头headers

# 这里的cookie需要你登录知乎 在network里面的all找到hot 然后在请求头里面找到你登录的cookie值
header={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'cookie':cookie
}


2-创建session对象 将cookie值存入 方便之后不需要重复写入cookie

sess = requests.Session()
sess.headers = header
url = 'https://www.zhihu.com/hot'
r = sess.get(url)
#print(r.text)

3-接下来就是获取知乎热搜新闻上我们需要的字段 如热搜标题 热搜热度 热搜URL 热搜图片

selector = etree.HTML(r.text)

eles = selector.cssselect('div.HotList-list>section')

#total_ls=[]
for index,ele in enumerate(eles):
    #print(index+1)
    #temp_dict={}
    # 取第一个  因为是列表  所以把列表第一个值取出来 然后将列表转为普通的元素
    title = ele.xpath('./div[@class="HotItem-content"]/a/h2/text()')[0]
    #print(title)
    url = ele.xpath('./div[@class="HotItem-content"]/a/@href')[0]
    #print(url)
    hot = ele.xpath('./div[@class="HotItem-content"]/div/text()')[0]
    #print(hot)
    crawled_time = datetime.now()
    #print(crawled_time)
    #从列表中取出来
    jpgUrl = ele.xpath('./a[@class="HotItem-img"]/img')
    #print(jpgUrl)
    # 判断图片是否存在
    if jpgUrl:
        img = jpgUrl[0].get('src')
        #print(img)
        res = requests.get(img)
        # 这里是将图片里的内容编码成base64编码 不是图片
        imgbase64code = base64.b64encode(res.content)
        #print(imgbase64code)

    else:
       img = ''

4-将获取到的字段存入到本地文件夹中 如果本地没有这个文件夹 通过os.mkdir创建这个文件夹

#判断目录是否存在  如果不存在  就创建目录 
if not os.path.exists(r'd:/知乎新闻'):
    os.mkdir(r'd:/知乎新闻')

5-存取知乎上获取的字段值

with open(r'd:/知乎新闻/%d.txt'%(index+1),'w') as f:
        #必须是字符串  不能是列表 这里需要强转下
        f.write('知乎标题title:'+title+'\n')
        f.write('知乎热搜URL:'+url+'\n')
        f.write('知乎热搜热度HOT:'+hot+'\n')
        f.write('知乎热搜爬取时间:'+str(crawled_time)+'\n')
        f.write('知乎图片base64编码:'+str(imgbase64code)+'\n')

6-完整代码如下

import requests
from lxml import etree
import cssselect
import base64
from datetime import datetime
import os
#判断目录是否存在  如果不存在  就创建目录 
if not os.path.exists(r'd:/知乎新闻'):
    os.mkdir(r'd:/知乎新闻')


header={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'cookie':cookie
}

sess = requests.Session()
sess.headers = header
url = 'https://www.zhihu.com/hot'
r = sess.get(url)
#print(r.text)

selector = etree.HTML(r.text)

eles = selector.cssselect('div.HotList-list>section')

#total_ls=[]
for index,ele in enumerate(eles):
    #print(index+1)
    #temp_dict={}
    # 取第一个  因为是列表  所以把列表第一个值取出来 然后将列表转为普通的元素
    title = ele.xpath('./div[@class="HotItem-content"]/a/h2/text()')[0]
    #print(title)
    url = ele.xpath('./div[@class="HotItem-content"]/a/@href')[0]
    #print(url)
    hot = ele.xpath('./div[@class="HotItem-content"]/div/text()')[0]
    #print(hot)
    crawled_time = datetime.now()
    #print(crawled_time)
    #从列表中取出来
    jpgUrl = ele.xpath('./a[@class="HotItem-img"]/img')
    #print(jpgUrl)
    # 判断图片是否存在
    if jpgUrl:
        img = jpgUrl[0].get('src')
        #print(img)
        res = requests.get(img)
        # 这里是将图片里的内容编码成base64编码 不是图片
        imgbase64code = base64.b64encode(res.content)
        #print(imgbase64code)

    else:
       img = ''
    #temp_dict={'title标题':title,'url路径':url,'hot热度':hot,'crawled_time爬取时间':crawled_time,'imgbase64code编码内容':imgbase64code}
    

    #print(total_ls)

    with open(r'd:/知乎新闻/%d.txt'%(index+1),'w') as f:
        #必须是字符串  不能是列表 这里需要强转下
        f.write('知乎标题title:'+title+'\n')
        f.write('知乎热搜URL:'+url+'\n')
        f.write('知乎热搜热度HOT:'+hot+'\n')
        f.write('知乎热搜爬取时间:'+str(crawled_time)+'\n')
        f.write('知乎图片base64编码:'+str(imgbase64code)+'\n')

print("爬取知乎新闻热搜全部完成")

7-完整效果演示

爬虫实例2:手动设置cookie 爬取知乎50条热搜 利用base64库将每一条热搜新闻上的图片内容编码成base64编码_第1张图片知乎新闻文件下会有50个txt文件 打开每一个txt文件会出现如下的内容
爬虫实例2:手动设置cookie 爬取知乎50条热搜 利用base64库将每一条热搜新闻上的图片内容编码成base64编码_第2张图片

你可能感兴趣的:(python,爬虫)