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

本文介绍了如何手动设置cookie来爬取知乎的50条热搜新闻,包括热搜标题、热度、URL和图片。通过构造请求头headers,创建session对象存储cookie,然后抓取所需字段。最后,将数据保存到本地文件,每个文件包含一条热搜的详细信息,图片内容以Base64编码形式存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置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
### 爬取数据的实现方法 在 Python 中,可以通过 `requests` 发送 HTTP 请求获取网页内容,并结合 XPath 或正则表达式解析 HTML 数据。为了确保爬虫高效运行并避免被反爬虫机制阻止,可以引入布隆过滤器和哈希算法进行判重[^1]。 以下是一个完整的实现方案,包括请求发送、HTML 解析以及存储结果到 MySQL 的过程: #### 1. 发送请求 使用 `requests` 模拟浏览器行为,向榜页面发起 GET 请求。需要注意的是,乎可能对请求头有要求,因此需要设置合适的 User-Agent。 ```python import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get("https://www.zhihu.com/billboard", headers=headers) html_content = response.text ``` #### 2. 解析 HTML 内容 利用 `lxml` 中的 XPath 方法提取榜的数据。假设每个目包含标题和度值,可以根据 HTML 结构编写相应的 XPath 表达式。 ```python from lxml import etree # 将 HTML 转换为 ElementTree 对象 tree = etree.HTML(html_content) # 提取标题和度 hot_list = tree.xpath("//div[@class='HotList-item']") # 假设这是项的父节点 data = [] for item in hot_list: title = item.xpath(".//a/text()")[0].strip() # 提取标题 heat = item.xpath(".//div[@class='HotList-itemMetrics']/text()")[0].strip() # 提取度 data.append({"title": title, "heat": heat}) ``` #### 3. 数据存储 将爬取到的数据存储到 MySQL 数据中。首先需要建立数据连接,然后插入数据。 ```python import pymysql # 创建数据连接 connection = pymysql.connect( host="localhost", user="root", password="your_password", database="zhihu_hot", charset="utf8mb4" ) try: with connection.cursor() as cursor: # 创建表(如果不存在) create_table_sql = """ CREATE TABLE IF NOT EXISTS hot_list ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), heat VARCHAR(50) ) """ cursor.execute(create_table_sql) # 插入数据 for entry in data: insert_sql = "INSERT INTO hot_list (title, heat) VALUES (%s, %s)" cursor.execute(insert_sql, (entry["title"], entry["heat"])) connection.commit() finally: connection.close() ``` #### 4. 反爬虫策略 为了避免频繁访问导致 IP 被封禁,可以在每次请求之间添加随机延时,并使用代理池轮换 IP 地址。 ```python import time import random def random_delay(): time.sleep(random.uniform(1, 3)) # 随机等待 1 到 3 秒 ``` 调用 `random_delay()` 函数以降低请求频率。 --- ### 注意事项 - **布隆过滤器**:用于去重已爬取的 URL,减少重复抓取。可以借助 `pybloom_live` 实现。 - **哈希算法**:如 `murmurhash`,可用于生唯一标识符,辅助布隆过滤器工作。 - **合法性**:确保遵守目标网站的 robots.txt 文件规定,尊重其爬虫政策。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值