python爬取 百姓网部分数据 + 存入MongoDB数据库详细案例

2023-11-04

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

新手上路,有不好的地方欢迎评论区指正。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有。

一、实施步骤

(1) 数据爬取:使用requests请求为基础获取数据源。(没安装的老哥自行安装
(2) UA伪装:模拟浏览器访问网址。
(3) 数据解析:使用xpath语法处理数据。
(4) 数据存储:获取需求数据后使用MongoDB进行存储。

二、目标网站

https://haikou.baixing.com/chongwujiaoyi/

 先分析目标网站

点击链接进去之后可以看到我们需要抓取的数据

 Ctrl+U打开网页源代码后,可以发现我们想要的数据直接就在网页上,然后开始吧!

三、获取数据

1. 引入库

import requests  #请求网页 
from lxml import html    # 导入xpath
import pymongo   # 用于连接mongoDB数据库

由于版本原因,etree模块不能直接从lxml包中导入,需要多一步操作

etree = html.etree

2.请求数据

url = 'https://haikou.baixing.com/chongwujiaoyi/'
respsone = requests.get(url,headers=headers).content.decode('utf-8')
# print(respsone)

2.1 获取第一层链接

首先拿到每一只宠物的链接,进去之后才能拿到宠物的信息,f12打开开发者工具,然后审查元素看到每一条宠物的链接就在<ul>下的<li>里面

list = []
html = etree.HTML(response)
lis = html.xpath('/html/body/section[2]/div[3]/ul/li')
for li in lis:
   fir_url = li.xpath('./a/@href')   # 拿到每只宠物的url地址
   list.append(fir_url)
for i in list:
    if i == []:
    list.remove([])     # 稍微做一些数据处理

 这是拿到的链接

3.抓取数据

3.1 分析页面

可以看到想要的数据全部一一对应在每一个div里面了,可以直接Ctrl cv复制xpath路径一个个拿下。

3.2 抓取数据

接下来才开始获取我们想要的数据了,用for循环请求每一个链接,然后根据xpath的规则拿到我们想要的数据

for url in list:
    url = url[0]   # 去掉列表
    content = requests.get(url,headers=headers).content.decode('utf-8')  # 编码
    

info = []     #创建一个列表来存放我们的数据
html = etree.HTML(content)
divs = html.xpath('/html/body/div[1]/div[1]/div[1]/div[4]/div[2]')
# print(len(divs))
for div in divs:
    blood = div.xpath('./div[2]/label[2]/text()')[0]
    age = div.xpath('./div[3]/label[2]/text()')[0]
    yimiao = div.xpath('./div[4]/label[2]/text()')[0]
    quchong = div.xpath('./div[5]/label[2]/text()')[0]
    price = div.xpath('./div[6]/label[2]/text()')[0]
    type = div.xpath('./div[7]/a/text()')[0]
    num = div.xpath('./div[8]/label[2]/text()')[0]
    phone = html.xpath('//*[@id="mobileNumber"]/strong/text()')[0]
    list = {
        '品种': type,
        '犬只血统':blood,
        '年龄':age,
        '疫苗情况':yimiao,
        '驱虫情况':quchong,
        '价格':price,
        '代售只数':num,
        '联系方式':phone
    }
info.append(list)  

需要抓取多页的朋友可以分析一下接口的页码参数,写个循环即可。

四、保存数据(MongoDB)

最后就只剩下把数据存入数据库了

client = pymongo.MongoClient('Localhost', 27017)   # 端口号
db = client['demo']  # 数据库名
data = db['petInfo']  # 表名
data.insert_one(list)   # 插入数据操作

五、完整代码

# _*_ coding:UTF-8 _*_

import requests
from lxml import html
import pymongo

etree = html.etree

headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
        'referer': 'https: // haikou.baixing.com / chongwujiaoyi / m177986 /'
          # 这里需要加入防盗链,第一次请求没加获取不到页面信息
    }
def get_res():
    url = 'https://haikou.baixing.com/chongwujiaoyi/'
    respsone = requests.get(url,headers=headers).content.decode('utf-8')
    # print(respsone)
    return respsone

def get_url(response):
    list = []
    html = etree.HTML(response)
    lis = html.xpath('/html/body/section[2]/div[3]/ul/li')
    for li in lis:
        fir_url = li.xpath('./a/@href')   # 拿到每只宠物的url地址
        list.append(fir_url)
    for i in list:
        if i == []:
            list.remove([])   # 稍微做一些数据处理
    print(list)
    return list

def get_pet_info(list):
    for url in list:
        url = url[0]
        content = requests.get(url,headers=headers).content.decode('utf-8')
        parse_data(content)

def parse_data(content):
    info = []     #创建一个列表来存放我们的数据
    html = etree.HTML(content)
    divs = html.xpath('/html/body/div[1]/div[1]/div[1]/div[4]/div[2]')
    # print(len(divs))
    for div in divs:
        blood = div.xpath('./div[2]/label[2]/text()')[0]
        age = div.xpath('./div[3]/label[2]/text()')[0]
        yimiao = div.xpath('./div[4]/label[2]/text()')[0]
        quchong = div.xpath('./div[5]/label[2]/text()')[0]
        price = div.xpath('./div[6]/label[2]/text()')[0]
        type = div.xpath('./div[7]/a/text()')[0]
        num = div.xpath('./div[8]/label[2]/text()')[0]
        phone = html.xpath('//*[@id="mobileNumber"]/strong/text()')[0]
        list = {
            '品种': type,
            '犬只血统':blood,
            '年龄':age,
            '疫苗情况':yimiao,
            '驱虫情况':quchong,
            '价格':price,
            '代售只数':num,
            '联系方式':phone
        }
        info.append(list)
        sava_mongodb(list)
    print(info)

def sava_mongodb(list):
    client = pymongo.MongoClient('Localhost', 27017)
    db = client['demo']
    data = db['petInfo']
    data.insert_one(list)

def main():
    response = get_res()
    list = get_url(response)
    # get_pet_info(list)

if __name__ == '__main__':
    main()

总结

摘抄Jack-Cui大佬的一句话:我们要做一个友好的爬虫。写爬虫,要谨慎,勿给服务器增加过多的压力,满足我们的获取数据的需求,这就够了。

你好,我也好,大家好才是真的好。

    PS:如果觉得本篇本章对您有所帮助,欢迎关注、评论、点赞,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取 百姓网部分数据 + 存入MongoDB数据库详细案例 的相关文章

  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Python 2.7 将比特币私钥转换为 WIF 私钥

    作为一名编码新手 我刚刚完成了教程 教程是这样的 https www youtube com watch v tX XokHf nI https www youtube com watch v tX XokHf nI 我想用 1 个易于阅读
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • Pandas - 合并数据框以将所有值保留在左侧,如果“左侧没有键”,则从右侧“插入”值,否则“更新”左侧现有的“键”

    我有两个数据框 df1 和 df2 np random seed 0 df1 pd DataFrame key A B C D id 2 23 234 2345 2021 np random randn 4 df2 pd DataFrame
  • mongodb 更新所有文档,并将值增加 1 [重复]

    这个问题在这里已经有答案了 我在 mongoDB 中有几个文档 文档结构是这样的 a abc myid 2 我想用 1 更新所有文档的 myid 例如 第一个文档 myid 1 第二个文档 myid 2 依此类推 有询问吗 尝试这个查询 d
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐

  • 代码管理工具SVN

    svn 什么是svn SVN是Subversion的简称 是一个开放源代码的版本控制系统 相较于RCS CVS 它采用了分支管理系统 它的设计目标就是取代CVS 互联网上很多版本控制服务已从CVS迁移到Subversion 说得简单一点SV
  • 力扣-->#剑指Offer 563 . 二叉树倾斜

    这道题要理解有一定的困难 首先看到这样的题目肯定想到的就是遍历 其次 需要有一个值来记录倾斜度 即 left right 再者 需要一个函数来帮忙辅助计算倾斜度 即findSum class Solution int findSum Tre
  • RIP、OSPF等路由协议严格意义上讲属哪一层?

    1 RIP基于UDP BGP基于TCP OSPF和EIGRP基于IP 这些在TCP IP协议栈中定义的路由协议用于发现和维护前往目的地的最短路径 你可以认为它们不属于网络层协议 注意 是用 based on 而不是实现了 BGP用TCP 所
  • 微信公众号h5页面实现授权,前端部分

    授权步骤 微信开发工具上配置公众号的apiId 微信环境内调起微信的授权功能 代码实现 此段代码放在app vue的监听函数中 每当路由发生变化 都会判断此页面是否已授权 没授权的话则进行授权 watch route handler fun
  • 4. 消息中心的设计与实现

    消息中心的设计与实现 一 引言 运用场景 1 消息的主动提醒 客户端被动接收 2 客户模块 及时通讯 3 单一登录 一个账号只能在一个设备登录 消息中心的实现方案 1 客户端轮询 2 TCP长连接 常用 Java的长连接的方案 Java B
  • windows命令行下ftp连接超时的可能原因

    1 需要连接的主机没有启用ftp服务 iis没有建立ftp站点 ftp身份验证设置不当 详情参考博文 windows下使用ftp 以及 windows开启ftp服务 两篇博文有重复的部分 我将他们取并集操作了一遍 另外 我还处理了iis未授
  • 使用Visual Studio编译ffmpeg

    一 首先参照下面的链接配置和编译 FFmpeg在VS2017下的编译 vs2017 ffmpeg源码编译 鱼儿 1226的博客 CSDN博客 vs2019编译ffmpeg源码为静态库动态库 完整步骤 亲测可行 ffmpeg vs 令狐掌门的
  • 嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理

    测验1 Python基本语法元素 知识点概要 普遍认为Python语言诞生于1991年 Python语言中的缩进在程序中长度统一且强制使用 只要统一即可 不一定是4个空格 尽管这是惯例 IPO模型指 Input Process Output
  • 求最长不含重复字符的子字符串——C++

    声明 本文原题主要来自力扣 记录此博客主要是为自己学习总结 不做任何商业等活动 一 原题描述 剑指 Offer 48 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 计算该最长子字符串的长度 示例 1 输入
  • Linux查看进程命令

    查看进程 1 ps 命令用于查看当前正在运行的进程 grep 搜索 例如 ps ef grep java 表示查看所有进程里 CMD 是 java 的进程信息 2 ps aux grep java aux 显示所有状态 ps 3 kill
  • Sublime Text4 配置 Python3 环境、代码提示、编译报错教程

    1 配置 Python3 环境 单击 工具 gt 编译系统 gt 新建编译系统 弹出 替换里面的内容为 cmd G CodeTools anaconda3 python exe u file file regex File line 0 9
  • 数据中台数据分析过程梳理

    在当今社会中 随着企业的快速发展 相关业务系统的建设也会越来越多 新的业务模式 新的IT架构 多云环境的出现等等 而一些问题就逐渐暴露了出来 企业之间的IT无法做到互通 新模式生产数据与旧数据无法互通 企业IT架构错综复杂 底层数据互通更加
  • java使用opencv库二值化图片

    应用场景 截取监控视频图片保存到本地后用作后期监控视频角度调整参考 使用二值化后的图片并进行透明度降低进行监控矫正 package img import java awt Color import java awt image Buffer
  • delphi XE5如何把其它程序而不是本软件在通知区域的图标隐藏?不是关闭进程。请举个详细例子,比如Shell_NotifyIcon...

    Delphi XE5可以使用API函数Shell NotifyIcon来实现隐藏其它程序的图标 具体代码例子如下 procedure HideIcon APid Cardinal var noteIconData TNOTIFYICONDA
  • 关于 hostapd

    关于 hostapd 主页 http w1 fi hostapd hostapd是一个IEEE 802 11的AP和IEEE 802 1X WPA WPA2 EAP RADIUS验证器 此页面用于怎么在linux系统下使用它 其他操作系统请
  • 金融贷款行业实时高精准获客 ——三网运营商大数据

    都说生产是第一因素 但对于任何企业来说 客户来源才是第一因素 在大多数行业 获得客户的困难已经成为行业的挑战 如今 许多行业和企业获得客户的主要来源是在线促销和客户获取 现在几乎每个人都有一部手机 运营商可以根据移动客户的访问行为 通信行为
  • 排查java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException:***

    首先排查 vi etc sysconfig network 没有就加上 HOSTNAME 你的主机名 XXXX 如果有 接着排查 vi etc hosts 没有就加上 127 0 0 1 localhost localdomain loca
  • 2021年全球与中国高速分散机行业市场规模及发展前景分析

    2021年全球与中国高速分散机行业市场规模及发展前景分析 本报告研究全球与中国市场高速分散机的发展现状及未来发展趋势 分别从生产和消费的角度分析高速分散机的主要生产地区 主要消费地区以及主要的生产商 重点分析全球与中国市场的主要厂商产品特点
  • 论文阅读:DeepFake-Adapter: Dual-Level Adapter for DeepFake Detection(Deepfake模型快速调参)

    一 论文信息 论文名称 DeepFake Adapter Dual Level Adapter for DeepFake Detection 作者团队 项目主页 https github com rshaojimmy DeepFake Ad
  • python爬取 百姓网部分数据 + 存入MongoDB数据库详细案例

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 实施步骤 二 目标网站 先分析目标网站 三 获取数据 1 引入库 2 请求数据 2 1 获取第一层链接 3 抓取数据 3 1 分析页面 3 2 抓取数据 四