爬虫小案例:适合Python零基础、对爬虫数据采集感兴趣的同学!

   日期:2024-01-17     浏览:49    评论:0    

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站,本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法。

适合人群:

Python零基础、对爬虫数据采集感兴趣的同学!

环境介绍:

python 3.6
pycharm
requests
re
json

爬虫的一般思路

1、确定爬取的url路径,headers参数

2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据

3、解析数据 -- re模块:提供全部的正则表达式功能

4、保存数据 -- 保存json格式的数据

1、确定爬取的url路径,headers参数

 

 

 

    base_url = 'https://www.guokr.com/ask/highlight/?page={}'.format(str(page))
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

 

2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据

 

 

   response = requests.get(base_url, headers=headers)
    data = response.text
    # print(data)

 

3、解析数据 -- re模块:提供全部的正则表达式功能

编译正则表达式 预编译的代码对象比直接使用字符串要快,因为解释器在执行字符串形式的代码前都推荐大家把字符串编译成代码对象

pattern = re.compile('<h2><a target="_blank" href="(.*?)">(.*?)</a></h2>', re.S)
    pattern_list = pattern.findall(data)  # -->list
    # print(pattern_list)
    # json [{[]}]{}
    # 构建json数据格式
    for i in pattern_list:
        data_dict = {}
        data_dict['title'] = i[1]
        data_dict['href'] = i[0]
        data_list.append(data_dict)
    # 转换成json格式
    # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:
    json_data_list = json.dumps(data_list, ensure_ascii=False)
    # print(json_data_list)
    
with open("guoke02.json", 'w', encoding='utf-8') as f:
    f.write(json_data_list)

 

 

 

 

 

 

4、保存json格式的文件

 

 

 

 

每页20条数据,共100页,2000条数据~

如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!

完整代码如下:

# requests
# re
# json
# 爬虫的一般思路
# 1、确定爬取的url路径,headers参数
# 2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据
# 3、解析数据 -- re模块:提供全部的正则表达式功能
# 4、保存数据 -- 保存json格式的数据
import requests  # pip install requests
import re
import json
data_list = []
for page in range(1, 101):
    print("====正在爬取第{}业数据====\n".format(page))
    # 1、确定爬取的url路径,headers参数
    base_url = 'https://www.guokr.com/ask/highlight/?page={}'.format(str(page))
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    # 2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据
    response = requests.get(base_url, headers=headers)
    data = response.text
    # print(data)
    # 3、解析数据 -- re模块:提供全部的正则表达式功能
    # <h2><a target="_blank" href="https://www.guokr.com/question/669761/">印度人把男人的生殖器叫林伽,把女人的生殖器叫瑜尼,林伽和瑜尼的交合,便是瑜伽。这是真还是假的</a></h2>
    # 3、1 编译正则表达式  预编译的代码对象比直接使用字符串要快,因为解释器在执行字符串形式的代码前都推荐大家把字符串编译成代码对象
    pattern = re.compile('<h2><a target="_blank" href="(.*?)">(.*?)</a></h2>', re.S)
    pattern_list = pattern.findall(data)  # -->list
    # print(pattern_list)
    # json [{[]}]{}
    # 构建json数据格式
    for i in pattern_list:
        data_dict = {}
        data_dict['title'] = i[1]
        data_dict['href'] = i[0]
        data_list.append(data_dict)
    # 转换成json格式
    # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:
    json_data_list = json.dumps(data_list, ensure_ascii=False)
    # print(json_data_list)
    # 保存json格式的文件
    with open("guoke02.json", 'w', encoding='utf-8') as f:
        f.write(json_data_list)

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服