精华内容
下载资源
问答
  • Python入门学习(第三天)--爬取网站数据

    万次阅读 热门讨论 2019-09-01 13:57:59
    在我们学习Python的第一天和第二天的时候我们已经把Python安装好了,环境配置也处理完毕了,今天我们就来爬数据,用Python总得做点啥是不是,今天我们先爬取网站数据,提高一下我们明天开始基础的积极性。...

    在我们学习Python的第一天和第二天的时候我们已经把Python安装好了,环境配置也处理完毕了,今天我们就来爬数据,用Python总得做点啥是不是,今天我们先爬取网站数据,提高一下我们明天开始学基础的积极性。

    废话不多逼逼了,开始上步骤,请确保每一步与笔者一致并执行成功!!!
    废话不多逼逼了,开始上步骤,请确保每一步与笔者一致并执行成功!!!
    废话不多逼逼了,开始上步骤,请确保每一步与笔者一致并执行成功!!!


    准备开始

    每一次打算用 Python 搞点什么的时候,你问的第一个问题应该是:“我需要用到什么库”?


    第一步,连接并获取一个要爬取的网站内容

    今天网页爬取要用到的库(选任意一个就可以):

    要爬取的网站:
    https://www.fasttrack.co.uk/league-tables/tech-track-100/league-table/
    在这里插入图片描述
    爬取数据之前要先分析你将要爬取数据的数据结构,通过鼠标右键你想要查看的内容,选择“检查”,就能看到他的dom结构。
    在这里插入图片描述
    这个例子里,所有的100个结果都包含在同一个页面中,还被 标签分隔成行。但实际抓取过程中,许多数据往往分布在多个不同的页面上,你需要调整每页显示的结果总数,或者遍历所有的页面,才能抓取到完整的数据。

    在表格页面上,你可以看到一个包含了所有100条数据的表格,右键点击它,选择“检查”,你就能很容易地看到这个 HTML 表格的结构。包含内容的表格本体是在这样的标签里:

    在这里插入图片描述
    每一行都是在一个 标签里,也就是我们不需要太复杂的代码,只需要一个循环,就能读取到所有的表格数据,并保存到文件里。

    附注:你还可以通过检查当前页面是否发送了 HTTP GET 请求,并获取这个请求的返回值,来获取显示在页面上的信息。因为 HTTP GET 请求经常能返回已经结构化的数据,比如 JSON 或者 XML 格式的数据,方便后续处理。你可以在开发者工具里点击 Network 分类(有必要的话可以仅查看其中的 XHR 标签的内容)。这时你可以刷新一下页面,于是所有在页面上载入的请求和返回的内容都会在 Network 中列出。此外,你还可以用某种 REST 客户端(比如 Insomnia)来发起请求,并输出返回值。


    将你的编辑器和电脑上安装BeautifulSoup4

    windows键加r键开启命令行。

    $ pip install BeautifulSoup4
    

    然后再在你的编辑器上进行安装
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    安装完成后在界面下方会提示“Package‘bs4’ install successfully”

    在这里插入图片描述
    现在开始在你第一天print出Hello World的那个文件把那个Print删了开始改成我们今天接下来的代码:

    首先要做的是导入代码中需要用到的各种模块。上面我们已经提到过 BeautifulSoup,这个模块可以帮我们处理 HTML 结构。接下来要导入的模块还有 urllib,它负责连接到目标地址,并获取网页内容。最后,我们需要能把数据写入 CSV 文件,保存在本地硬盘上的功能,所以我们要导入 csv 库。当然这不是唯一的选择,如果你想要把数据保存成 json 文件,那相应的就需要导入 json 库。

    # 导入需要的模块
    from bs4 import BeautifulSoup
    import urllib.request
    import csv
    
    # 把网站url存在变量里
    urlpage = 'https://www.fasttrack.co.uk/league-tables/tech-track-100/league-table/'
    
    # 获取网页内容,把html数据保存在“page变量里”
    page = urllib.request.urlopen(urlpage)
    # 用beautiful soup 解析 html 数据
    soup = BeautifulSoup(page, 'html.parser')
    

    这时候,你可以试着把 soup 变量打印出来,看看里面已经处理过的 html 数据长什么样:

    print(soup)
    

    如果变量内容是空的,或者返回了什么错误信息,则说明可能没有正确获取到网页数据。你也许需要用一些错误捕获代码,配合 urllib.error 模块,来发现可能存在的问题。


    第二步,用BeautifulSoup处理获得的html数据

    查找 HTML 元素

    既然所有的内容都在表格里(<table>标签),我们可以在 soup 对象里搜索需要的表格,然后再用 find_all 方法,遍历表格中的每一行数据。

    如果你试着打印出所有的行,那应该会有 101 行——100行内容,加上一行表头。

    # 在表格中查找数据
    table = soup.find('table', attrs={'class': 'tableSorter'})
    results = table.find_all('tr')
    print('Number of results', len(results))
    

    看看打印出来的内容,如果没问题的话,我们就可以用一个循环来获取所有数据啦。

    如果你打印出 soup 对象的前 2 行,你可以看到,每一行的结构是这样的:
    在这里插入图片描述
    可以看到,表格中总共有 8 列,分别是 Rank(排名)、Company(公司)、Location(地址)、Year End(财年结束)、Annual Sales Rise(年度销售增长)、Latest Sales(本年度销售额)、Staff(员工数)和 Comments(备注)。这些都是我们所需要的数据。

    这样的结构在整个网页中都保持一致(不过在其他网站上可能就没这么简单了!),所以我们可以再次使用 find_all 方法,通过搜索 元素,逐行提取出数据,存储在变量中,方便之后写入 csv 或 json 文件。

    循环遍历所有的元素并存储在变量中

    在 Python 里,如果要处理大量数据,还需要写入文件,那列表对象是很有用的。我们可以先声明一个空列表,填入最初的表头(方便以后CSV文件使用),而之后的数据只需要调用列表对象的 append 方法即可。

    rows = []
    rows.append(['Rank', 'Company Name',
                'Webpage', 'Description',
                'Location', 'Year end',
                'Annual sales rise over 3 years', 'Sales f000s',
                'Staff', 'Comments'
                ])
    print(rows)
    

    这样就将打印出我们刚刚加到列表对象 rows 中的第一行表头。

    你可能会注意到,我输入的表头中比网页上的表格多写了几个列名,比如 Webpage(网页)和 Description(描述),请仔细看看上面打印出的 soup 变量数据——第二行第二列的数据里,可不只有公司名字,还有公司的网址和简单描述。所以我们需要这些额外的列来存储这些数据。


    第三步,在soup对象里循环搜索需要的html元素

    下一步,我们遍历所有100行数据,提取内容,并保存到列表中。

    循环读取数据的方法:

    # 遍历所有数据
    for result in results:
    	# 找到每一个 td 单元格的内容
    	data = result.find_all('td')
    	# 如果该单元格无数据,则跳过
    	if len(data) == 0:
    		continue
    

    因为数据的第一行是 html 表格的表头,所以我们可以跳过不用读取它。因为表头用的是 标签,没有用 标签,所以我们只要简单地查询 标签内的数据,并且抛弃空值即可。

    接着,我们将 data 的内容读取出来,赋值到变量中:

    # 将单元格内容保存到变量中
    rank = data[0].getText()
    company = data[1].getText()
    location = data[2].getText()
    yearend = data[3].getText()
    salesrise = data[4].getText()
    sales = data[5].getText()
    staff = data[6].getText()
    comments = data[7].getText()
    

    如上面的代码所示,我们按顺序将 8 个列里的内容,存储到 8 个变量中。当然,有些数据的内容还需有额外的清理,去除多余的字符,导出所需的数据。


    第四步,进行数据处理(将不要的符号去掉等等操作)

    数据清理

    如果我们打印出 company 变量的内容,就能发现,它不但包含了公司名称,还包括和描述。如果我们打印出 sales 变量的内容,就能发现它还包括一些备注符号等需要清除的字符。

    print('Company is', company)
    print('Sales', sales)
    

    我们希望把 company 变量的内容分割成公司名称和描述两部分。这用几行代码就能搞定。再看看对应的 html 代码,你会发现这个单元格里还有一个 元素,这个元素里只有公司名称。另外,还有一个 <a> 链接元素,包含一个指向该公司详情页面的链接。我们一会也会用到它!
    在这里插入图片描述
    为了区分公司名称和描述两个字段,我们再用 find 方法把 元素里的内容读取出来,然后删掉或替换 company 变量中的对应内容,这样变量里就只会留下描述了。

    要删除 sales 变量中的多余字符,我们用一次 strip 方法即可。

    # 提取公司名字
    companyname = data[1].find('span', attrs={'class': 'company-name'}).getText()
    description = company.replace(companyname, '')
    # 移除多余的字符
    sales = sales.strip('*').strip('+').replace(',', '')
    

    最后我们要保存的是公司网站的链接。就像上面说的,第二列中有一个指向该公司详情页面的链接。每一个公司的详情页都有一个表格,大部分情况下,表格里都有一个公司网站的链接。

    在这里插入图片描述
    检查公司详情页里,表格中的链接

    为了抓取每个表格中的网址,并保存到变量里,我们需要执行以下几个步骤:

    • 在最初的 fast track 网页上,找到需要访问的公司详情页的链接。
    • 发起一个对公司详情页链接的请求
    • 用 Beautifulsoup 处理一下获得的 html 数据
    • 找到需要的链接元素

    正如上面的截图那样,看过几个公司详情页之后,你就会发现,公司的网址基本上就在表格的最后一行。所以我们可以在表格的最后一行里找 <a> 元素。

    # 获取链接,并发出访问请求
    url = data[1].find('a').get('href')
    page = urllib.request.urlopen(url)
    # 处理HTML数据
    soup = BeautifulSoup(page, 'html.parser')
    # 找到表格中的最后一行,尝试获取<a>元素的内容
    try:
    	tableRow = soup.find('table').find_all('tr')[-1]
    	webpage = tableRow.find('a').get('href')
    except:
    	webpage = None
    

    同样,有可能出现最后一行没有链接的情况。所以我们增加了 try… except 语句,如果没有发现网址,则将变量设置成 None。当我们把所有需要的数据都存在变量中的以后(还在循环体内部),我们可以把所有变量整合成一个列表,再把这个列表 append 到上面我们初始化的 rows 对象的末尾。

    # 把变量添加到rows对象里
     rows.append([rank, company,
                  webpage, desciption,
                  location, yearend,
                  salesrise, sales,
                  staff, comments
                  ])
    # 注意这里退出了循环体
    print(rows)
    

    上面代码的最后,我们在结束循环体之后打印了一下 rows 的内容,这样你可以在把数据写入文件前,再检查一下。


    第五步,把数据写入csv文件中

    最后,我们把上面获取的数据写入外部文件,方便之后的分析处理。在 Python 里,我们只需要简单的几行代码,就可以把列表对象保存成文件。

    # 创建一个 csv 文件,并将 rows 对象写入这个文件中
    with open('techtrack100.scv', 'w', newline='') as f_output:
    	csv_output = csv.writer(f_output)
    	csv_output.writerows(rows)
    

    最后我们来运行一下这个 python 代码,如果一切顺利,你就会发现一个包含了 100 行数据的 csv 文件出现在了目录中,你就可以看到如下效果了:
    在这里插入图片描述
    如果你运行时报错:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’
    请将最后的代码改成:

    with open('techtrack100.csv', 'w', newline='') as f_output:
        csv_output = csv.writer(f_output.replace(u'\xa0', u''))
        csv_output.writerows(rows)
    

    OK了,如果朋友们还有其他什么问题就在下面留言吧!明天开始学python基础!一起加油!

    展开全文
  • 主要介绍了SpringBoot中使用Jsoup爬取网站数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Python数据爬取

    2020-08-26 18:51:27
    文章目录数据爬取介绍1.数据采集2.常用数据爬取工具二.Scrapy爬虫框架1.安装配置Scrapy框架2.Debug爬虫工程3.Scrapy框架组成4.Scrapy返回爬取页面数据5.爬取动态网页6.网站反爬虫 数据爬取介绍 1.数据采集 数据来源 ...

    一.数据爬取介绍

    1.数据采集

    数据来源

    • 从网上爬取数据(crawling)
    • 从本地系统收集数据(scraping):文件、数据库等

    网络数据采集模型
    在这里插入图片描述

    2.常用数据爬取工具

    第三方库实现爬取

    • Requests、lxml:灵活,简单

    PySpider爬虫框架

    • 提供WebUI界面编写及管理爬虫
    • 上手快,学习简单
    • 对Windows操作系统支持很差

    Scrapy爬虫框架

    • 功能强大
    • 可定制性强
    • 多线程,爬取效率高

    二.Scrapy爬虫框架

    1.安装配置Scrapy框架

    安装Scrapy

    • conda install scrapy

    配置Scrapy环境变量

    • 将Anaconda的Scripts文件夹加入到Path环境变量中

    创建scrapy项目的命令

    • scrapy startproject 新工程名

    创建Spider

    • scrapy genspider 爬虫名 start_url
    • 修改parse()方法,在控制台输出文本
      启动Spider
    • scrapy crawl 爬虫名

    2.Debug爬虫工程

    使用Python脚本执行命令行启动爬虫

    • 在项目根目录添加脚本文件
    • 调用Scrapy框架的命令行执行方法启动爬虫: cmdline模块 execute()方法
    from scrapy.cmdline import execute
    execute('scrapy crawl examplespider'.split())
    

    调试爬虫

    • 在parse()方法中设置断点
    • 使用Debug模式调试项目

    3.Scrapy框架组成

    spiders文件夹

    • 定义爬虫文件

    items.py

    • 定义框架内数据传输格式

    pipelines.py

    • 数据保存模块

    middlewares.py

    • 中间件模块

    settings.py

    • 框架配置模块

    在这里插入图片描述
    执行顺序:

    • 1.Spider的yield将requests发送给Engine
    • 2.Engine对requests不做任何的处理就发送给Scheduler
    • 3.Scheduler(url调度器),生成requests交给Engine
    • 4.Engine拿到requests,通过middleware进行层层过滤发送给Downloader
    • 5.downloader在网上获取到response数据之后,又经过middleware进行层层过滤发送给Engine
    • 6.Engine获取到response之后,返回给Spider,Spider的parse()方法对获取到的response数据进行处理解析出items或者requests
    • 7.将解析出来的items或者requests发送给Engine
    • 8.Engine获取到items或者requests,将items发送给ITEMPIPELINES,将requests发送给Scheduler只有当调度器中不存在任何的requests的时候,整个程序才会停止( 也就是说,对于下载失败的URL,scrapy也会重新进行下载)

    4.Scrapy返回爬取页面数据

    通过解析方法返回爬取页面数据

    • parse()方法的response参数
    • response对象常用属性和方法
    属性或方法作用
    url当前返回数据所对应的页面url
    statushttp请求状态码
    meta用于request与response之间的数据传递
    body返回页面html源码,如用纯正则表达式匹配数据需要获得页面html源码
    xpath()使用xpath选择器解析网页
    css()使用css选择器解析网页

    在Scrapy爬虫框架中提取网页数据的方法

    • xpath选择器

    • 用于选择XML文档中的节点的语言,可以与HTML一起使用

    • css选择器

    • 用于将样式应用于HTML文档的语言

    • 将样式与特定的HTML元素相关联

    • Scrapy中css选择器的代码最后也会转换成xpath选择器的代码

    • 正则表达式

    • 提取非标签内容

    xpath语法

    • xpath:使用路径表达式来选取 XML 文档中的节点或节点集
    表达式描述
    nodename选取的节点名
    /从根节点选取
    //选取所有符合条件的节点,而不考虑它们的位置
    .选取当前节点
    选取当前节点的父节点
    @选取属性

    路径表达式举例

    路径表达式结果
    /bookstore选取根元素 bookstore
    /bookstore/book选取属于 bookstore 的子元素的所有 book 元素
    //book选取所有 book 子元素,而不管它们在文档中的位置
    /bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置
    //@lang选取名为 lang 的所有属性
    /bookstore/book/text()选取属于 bookstore 的子元素的所有 book 元素的文本

    谓语

    • 谓语用来查找某个特定节点或者包含某个指定的值的节点
    • 谓语被嵌在方括号中
    路径表达式结果
    /bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素
    //title[@lang]选取所有拥有名为 lang 的属性的 title 元素
    //title[@lang=‘eng’]选取所有拥有值为 eng 的 lang 属性的 title 元素

    xpath选择器

    • Scrapy中xpath选择器
      基于lxml库

    • 获取选择器的网页数据
      extract()
      提取selector列表中的网页数据
      如果列表为空,取下标为0的网页数据会抛出异常
      extract_first()
      提取selector列表中下标为0的网页数据
      如果列表为空,不会抛出异常,返回None

    爬取从页面提取的URL

    • 使用场景
      详情页爬取
      多层级目录爬取
    • 提取URL发起HTTP请求
      构造request对象
      指定HTTP请求的URL
      指定处理这个页面的回调方法
      关闭去重标记
      使用yield返回request对象
    • request与对应的response传递数据
      meta字典

    Scrapy的item模块

    • item的作用
      定义框架中数据传输的形式
    • 定义item
      定义Item类并继承scrapy.Item
      定义变量
      变量名
      变量类型
      scrapy.Field()
    • 使用item
      使用字典的方式给item赋值
      item[“变量名”] = 赋值
    • 使用yield返回item

    将爬取数据保存到文件中

    • Feed exports
      将数据导出成常用数据格式的方法
    • 默认支持的格式
      JSON
      JSON lines
      CSV
      XML
    • 使用Feed exports的方法
      在命令行中使用-o来调对应的Feed exports
      在settings.py中配置Feed exports
    FEED_FORMAT = 'CSV'
    FEED_URI = ‘quotes.csv’
    

    5.爬取动态网页

    查看动态网页代码

    • 按住F12返回的html结果
    • 鼠标右键查看页面源代码:淘宝的商品详情页中的原始html中居然没价格

    动态网页的特点

    • 渲染后的html源码和渲染前的html源码是不同的

    在这里插入图片描述

    爬虫处理动态网页的方法

    • 解决方法
      分析js请求以及html源码去发现动态加载数据的位置
      找到ajax并去请求该接口并解析该请求的返回
    • 分析步骤
      使用Chrome的Network监控网络请求
      反复触发动态加载,分析出数据接口url

    6.网站反爬虫

    网站最主要的反爬虫原因

    • 不遵守规范的爬虫会影响网站的正常使用

    网站反爬虫的其他原因

    • 网站上的数据就是公司的重要资产
    • 爬虫对网站的爬取会造成网站统计数据的污染

    网站反爬虫手段举例

    • 根据访问IP频率封禁IP:一个IP某一个时刻访问频率太频繁,则封禁
    • 设置账号登陆时长,账号访问过多封禁
    • 弹出数字验证码和图片确认验证码
    • 对API接口的限制

    爬虫的反反爬策略

    • 反反爬的总体思想
      将爬虫伪装成自然人的浏览行为
    • 自然人浏览的特点
      访问频率不会非常的高
      使用的是浏览器进行访问
      网站设置登录要求后仍能正常使用
      可以完成验证操作
    • Scrapy反反爬功能实现
      爬虫配置settings.py
      爬虫框架中间件

    模拟自然人访问频率

    • 配置settings.py控制爬虫爬取行为
      设置爬取间隔
      设置并发爬取量

    相关配置如下

    配置默认值说明
    DOWNLOAD_DELAY0单位秒,爬取间隔时间为(0.5~1.5)*DOWNLOAD_DELAY
    CONCURRENT_REQUESTS16Scrapy downloader 并发请求的最大值
    CONCURRENT_REQUESTS_PER_DOMAIN16对单个网站进行并发请求的最大值
    CONCURRENT_REQUESTS_PER_IP0对单个IP进行并发请求的最大值

    User Agent介绍

    • User Agent的本质
      一个特殊字符串头
    • User Agent的作用
      使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
    • 查看浏览器UA的方法
    • 查看Scrapy爬虫UA的方法
      scrapy shell https://www.qq.com
      request.headers

    Scrapy设置随机UA

    • 安装UA生成库
      pip install user_agent
    • 编写的UserAgent中间件的类
      重写process_request()方法
    • 设置settings.py文件设置相应的配置和属性
      在DOWNLOADER_MIDDLEWARES下配置中间件
      启用自定义UserAgent中间件
      禁用Scrapy默认的UserAgnet中间件

    Cookie的介绍

    • Cookie保存的位置
      总是保存在用户客户端浏览器中
    • Cookie的有效性
      最短的浏览器关闭后就消失了
      最长是可以一直保存,直到被删除
    • Cookie就是用来绕开HTTP的无状态性的
      服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器的状态
    • Cookie常用于保持用户登录状态
    • 打开网页时请求中携带的Cookie
    • 打开网页时服务器设置客户端的Cookie

    使用Cookie使爬虫突破登录限制

    • 使用Cookie实现爬取需要登录的信息
      定义Cookie字符串
      在构造request时设置Cookie属性
      cookies=SCRAPE_COOKIE
    • 使用Cookie登录的优缺点
      优点:
      不需要知道登录url和表单字段以及其他参数
      不需要频繁登录输入用户名和密码
      缺点:
      Cookie有过期时间
    展开全文
  • python爬虫派泰嘉邦兼职数据爬取(仅用于学习) 最近发现了一个不怎么出名的找兼职的地方,还要交入会费,个人觉得挺坑的,所以写个爬虫想分析一下薪资的平均水平 不过他们数据挺多的而且爬取难度不高,可以作为入门...

    python爬虫派泰嘉邦兼职数据爬取(仅用于学习)

    最近发现了一个不怎么出名的找兼职的地方,还要交入会费,个人觉得挺坑的**(网上冲浪需注意财产安全哦)**
    所以写个爬虫想分析一下薪资的平均水平
    不过他们数据挺多的而且爬取难度不高,可以作为入门学习使用
    在这里插入图片描述

    先了解下网页的数据获取方式

    网站首页

    在这里插入图片描述

    进入网站数据页面并F12检查,点至网络页,点击左上角刷新网页

    在这里插入图片描述

    查看网页请求可以看到返回的是一个网页并且上面带了数据,数据不是通过json导入的

    在这里插入图片描述

    请求为get请求

    在这里插入图片描述

    知道数据来源就可以开始爬取了

    (在开始编写爬取逻辑前最好写几行简单代码测试一下是否可以获取到数据)

    导入所需的库(

    import requests
    import bs4
    import re
    import time
    import pandas
    

    初始化所需变量

    在这里插入图片描述

    • parm:get请求所需带的参数
    • zon:存所有数据所用对象
    zon = {}			#用于存储所有城市兼职信息的字典
    parm = {
        'page':'0',             #搜索页码
        'mid':'9',
        'classid':'1',
        'starttime':'2017-01-01',    #开始时间
        'endtime':'2036-10-10',      #结束时间
        'line':'10',            #搜索数据条数
        'tempid':'9',
        'ph':'1',
        'andor':'and',
        'orderby':'',
        'myorder':'0',
    }
    

    chenshi()函数:爬取城市分类,用于获取城市分类与各城市页面数

    在这里插入图片描述

    def chenshi():
        # ?page=0&mid=9&classid=1&starttime=2017-01-01&endtime=2036-10-10&line=10&tempid=9&ph=1&andor=and&orderby=&myorder=0&totalnum=41225
        
        #head :get访问头用于模拟正常浏览器访问
        head = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60'
        }
        #proxies :配置http与https的代理ip,可以替换为ip池,就挂一个代理防止不了禁ip,也许是我访问速度特慢,所以代理设不设无所谓
        proxies = {
            'http':'120.232.150.110:80',
            'https':'60.217.64.237:38829'
        }
        # 使用requests库get访问网址,timeout:访问超时时间  proxies:代理服务器  headers:访问头 params:get访问网址后所带参数
        r = requests.get('http://www.chinaptjb.com/e/action/ListInfo.php',proxies=proxies,timeout=5,params=parm,headers=head)
        #将get获取到的文本通过 'html.parser'解析器解析,官方文档有解析器介绍
        soup = bs4.BeautifulSoup(r.text,'html.parser')
        
    #     print(soup)
        #通过find方法查找class='selectpicker'的select标签,并搜索该标签的所有option标签返回成标签列表
        z = soup.find('select','selectpicker').find_all('option')
        z = [x.string for x in z]	#将城市标签列表里的字符串全拿出来组成列表,形成城市列表
        z = ['长沙']       #只爬取指定城市测试,若想全部爬取则注释或删除此行
        #循环城市兼职分类
        for i in range(z):
            #将爬取页码初始化为0
            parm['page'] = 0
            #将城市参数city修改为爬取的城市
            parm['city'] = i
            r = requests.get('http://www.chinaptjb.com/e/action/ListInfo.php',proxies=proxies,timeout=5,params=parm,headers=head)
            soup = bs4.BeautifulSoup(r.text,'html.parser')
            try:    #若页面只有一页,则无法查找到指定标签,再调用find_all标签时则会报错
                pages = int(re.findall(r'page=(\d+)&',soup.find_all('li','pagitem-last')[1].a['href'])[0])
            except:   #若为查询到页码标签报错则页面数赋值默认值1
                pages = 1
            #print(pages)
            paqu(pages=pages,cs = i)	#调用paqu函数爬取数据,将城市页数,与城市名称传递过去
            filename = i+'.xlsx'		#使用城市名加后缀创建字符串,用于后面数据存文件
            shen = pandas.DataFrame(zon[i])	#将一个城市的数据转为二维表,方便存excel文件
            shen.to_excel(filename)		#存以filename变量命名的文件
            time.sleep(4)	#调用函数休息一下
            r.close()		#关闭当前爬虫
            # print(zon)
            # break		#用于爬取一个城市,若需要爬取全部则注释
    

    paqu()函数:用于爬取单个城市所有兼职信息

    在这里插入图片描述

    def paqu(pages:int,cs:str):
        zon[cs] = []	#初始化该城市的字典对应值,为了后面添加数据不报错
        a = 0		#当前爬取页码
        cishu = 0	#爬取报错次数
    
        while a < pages:	#当爬取页码小于总页数时进入循环
            try:	#防止访问次数过多或其他原因报错
                parm['page'] = a	#修改爬取页数
                head = {
                    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60'
                }
                proxies = {
                    'http':'120.232.150.110:80',
                    'https':'60.217.64.237:38829'
                }
                r = requests.get('http://www.chinaptjb.com/e/action/ListInfo.php',headers=head,proxies=proxies,timeout=5,params=parm)
                soup = bs4.BeautifulSoup(r.text,'html.parser')
                # print(soup)
                # print(soup.find('div','article-list job-list').find_all('div','article-item article-full')[0])
                #因为在分析数据的时候出现了存数据的标签,类名不同的问题,也许是因为新老数据发布形式不一样的原因,所以采用了if选择来区分两者的数据分析方式
                if soup.find('div','article-list job-list').find_all('div','article-item article-full'):
                    for i in soup.find('div','article-list job-list').find_all('div','article-item article-full'):
                        shu = {}
                        shu['需求名'] = re.sub(r'<.?strong>','',i.find('h4','title').text)
                        shu['薪资'] = i.find('span','price').string
                        # print(i.find('div','meta'))
                        for n in i.find('div','meta').find_all('div'):
                            shu[n.find_all('span')[0].string[:-1]] = n.find_all('span')[1].string
                        shu['当前招聘状态'] = i.find('span','status-text').string
                        print(shu)
                        zon[cs].append(shu)
                else:
                    for i in soup.find('div','article-list job-list').find_all('div','article-item article-enter'):
                        shu = {}
                        shu['需求名'] = re.sub(r'<.?strong>','',i.find('h4','title').text)
                        shu['薪资'] = i.find('span','price').string
                        # print(i.find('div','meta'))
                        for n in i.find('div','meta').find_all('div'):
                            shu[n.find_all('span')[0].string[:-1]] = n.find_all('span')[1].string
                        shu['当前招聘状态'] = i.find('span','status-text').string
                        print(shu)
                        zon[cs].append(shu)
                a +=1	#页码加1用于爬取下一页
                cishu = 0	#重置报错次数
                time.sleep(1)	#休息一下
                r.close()	#关闭爬虫
                print(a,pages)	#输出爬取页面与总页数
            except:
                cishu+=1	#若报错,则报错次数+1
                print('服务器错误,停顿10秒')	#输出报错提示
                time.sleep(10)	#有可能是代理服务器访问频繁,休息一下
                if cishu>10:	#若连续报错10次则通过错误转型报错来终止程序
                    int('a')
            print('退出')	#输出成功爬取一页的提示
    chenshi()	#调用函数开始工作啦
    

    导出的excel展示

    在这里插入图片描述

    注:导出为.xlsx文件时如果只安装了pandas库可能会报错是缺少了一个库,安装报错所提示的模块即可解决问题

    (第一次写Markdown和第一次发表文章,有点菜请见谅)

    展开全文
  • 【Python爬虫实例学习篇】——5、【超详细记录】从爬取微博评论数据(免登陆)到生成词云 个人博客地址:ht/tps://www.asyu17.cn/ 精彩部分提醒: (1)微博评论页详情链接为一个js脚本 (2)获取js脚本链接需要该条...
  • 文章目录BeautifulSoup 简介使用方法实例 : 爬取 北京市企业大全 BeautifulSoup 简介 这个简写 bs 现在都是bs4,bs3 已经停止开发了,可以看看官方文档 BeautifulSoup,就是一个第三方的库,使用之前需要安装 pip ...
  • 引言 在爬虫学习中,一套完整的项目实战...在该项目实战中主要应用了:python语法基础、数据爬取、数据解析、数据分析及数据可视化、 数据爬取与解析 数据存储 数据可视化 Flask Echarts WordCloud 新手问题总结 ...

    引言

    在爬虫学习中,一套完整的项目实战对于代码和计算机思维能力有很大的提升。本文基于B站视频《Python爬虫基础5天速成(2021全新合集)Python入门+数据可视化》关于 “豆瓣电影Top250” 项目做出的总结、拓展与分享。
    在本文中,只展示数据爬取到数据保存的工作,数据可视化部分只做部分分析和结果展示。具体关于库的操作我选择了一些官方文档做链接,知识点比较全面请参考下列表。如果想要项目源代码,请评论或私信。

    数据爬取与解析

    数据爬取

    数据爬取工作是整个工程的第一步,这一阶段所要做的工作是将网页上带有我们需要的信息的网页源码抓取下来。建议在此步骤时,如果数据量不大全部抓取保存到本地;如果数据量很大,则先保存一组到多组数据到本地。在接下的数据解析时通过本地文件解析,这样做会避免后面多次访问网站而被封ip,当然针对被封ip有相应的解决办法,但是这些内容涉及到网络知识,建议后面再学。

    urllib方法

    import urllib.request
    base_url = "https://movie.douban.com/top250?start="
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
    }
    #构建请求
    req = urllib.request.Request(url=base_url,headers=header)
    #得到响应
    response = urllib.request.urlopen(req)
    html = response.read().decode("utf-8")
    with open("top250_first_page.html","w",encoding="utf-8") as f:
        f.write(html)
    

    requests方法

    import requests
    base_url = "https://movie.douban.com/top250?start="
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
    }
    response = requests.get(url=base_url,headers=header)
    data = response.content.decode()
    with open("top250_first_page.html","w",encoding="utf-8") as f:
        f.write(data)
    

    数据解析

    数据解析作为第二步是整个工程的核心,这一步直接决定了 我们是否能够在海量的数据中只得到我们想要的数据。爬虫中三种重要的数据解析的方法分别是:BeautifulSoup、re正则表达式和xpath,三种方法没有优劣好坏,按照我前面给出的文档,自己用好一种即可满足需求,当然三种方法根据场景使用是最高效的,如果你是大佬的话👍。
    我自己常用的是xpath方法。第一,xpath路径可以直接在网页上进行复制;第二,可以通过XPath Helper工具进行更好的测试,我在之前的博客有提到可以点击查看。下面我用三种不同的方法对保存到本地的一页上的数据进行了解析。

    BeaufifulSoup

    from bs4 import BeautifulSoup
    import re
    #将要解析的网站打开
    html = open("top250_first_page.html","rb")
    #构建BeautifulSoup对象
    soup = BeautifulSoup(html,"html.parser")
    #得到每一块的内容
    blocks = soup.select(".grid_view .item")
    #构建电影列表
    movie_list = []
    #电影链接和电影图片链接
    for index,block in enumerate(blocks):
        movie_dict = {}
        movie_dict["movie_href"] = block.select("a")[0].get("href")       #电影详情页链接
        movie_dict["pic_href"] = block.select("img")[0].get("src")        #电影链接
        title = block.select(".title")                      #电影名字
        if len(title)==2:
            movie_dict["c_title"] = block.select(".title")[0].text            #电影中文名字
            o_title = block.select(".title")[1].text            # 电影中文名字
            movie_dict["o_title"] = o_title.replace("/","")
        else:
            movie_dict["c_title"] = block.select(".title")[0].text            #电影中文名字
            movie_dict["o_title"] = " "                                       #电影外文名字
        movie_dict["rate"] = block.select(".star .rating_num")[0].text        #电影评分
        movie_dict["judge"] = block.select(".star span")[3].text[:-3]         #评分人数
        bd = block.select(".bd p")[0].text
        movie_dict["bd"] = re.sub(" ","",bd)
        movie_dict["inq"] = block.select(".quote .inq")[0].text.replace("。","")
        movie_list.append(movie_dict)
    #打印测试
    print(movie_list)
    

    xpath

    from lxml import etree
    import re
    #将要解析的网站打开
    html = open("top250_first_page.html","rb")
    content = html.read().decode("utf-8")
    #构建etree对象
    data = etree.HTML(content)
    #获取多个电影信息列表
    divs = data.xpath('//div[@class="item"]')
    for div in divs:
        movie_dict = { }
        movie_dict["movie_href"] = div.xpath('div[@class="pic"]/a/@href')
        #print(movie_href)          #测试
        movie_dict["pic_href"] = div.xpath('div[@class="pic"]//img/@src')
        #print(pic_href)           #测试
        title = div.xpath('div[@class="info"]//a/span[@class="title"]/text()')
        if len(title)==2:
            movie_dict["c_title"] = title[0]
            o_title = title[1].replace("/","")
            movie_dict["o_title"] = "".join(o_title.split())
        else:
            movie_dict["c_title"] = title[0]
            movie_dict["o_title"] = " "
        #print(c_title,o_title)      #测试
        movie_dict["rate"] = div.xpath('div//div[2]/div/span[2]/text()')
        #print(rate)                #测试
        judge = div.xpath('div//div[2]/div/span[4]/text()')
        movie_dict["judge"] = (str(judge))[2:-5]
        #print(judge)                #测试
        bd = str(div.xpath('div//div[@class="bd"]/p[1]/text()'))
        movie_dict["bd"] = bd.replace(" ","").replace(r"\xa0","").replace(r"\r","").replace(r"\n","")
        #print(bd)                   #测试
        print(movie_dict)
    

    re正则表达式

    import re
    from bs4 import BeautifulSoup
    #影片详情链接规则
    findLink = re.compile(r'<a href="(.*?)">')        #创建正则表达式对象,表示规则(字符串的模式)
    #影片图片规则
    findSrclink = re.compile(r'<img.*src="(.*?)"',re.S)
    #影片片名规则
    findTitle = re.compile(r'<span class="title">(.*)</span>')
    #影片的评分规则
    findGrade = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
    #评价人数规则
    findJud = re.compile(r'<span>(.*)人评价</span>')
    #找到概况
    findInq = re.compile(r'<span class="inq">(.*)</span>')
    #影片相关内容
    findBd = re.compile(r'<p class="">(.*?)</p>',re.S)
    #将要解析的网站打开
    html = open("top250_first_page.html","rb")
    content = html.read().decode("utf-8")
    datalist = []
    soup = BeautifulSoup(content, "html.parser")
    for item in soup.find_all("div",class_ = "item"):
        item = str(item)
        #print(html)                                             #测试电影信息的一小段有没有内解析拿到
        data = [ ]
        title = re.findall(findTitle,item)
        if(len(title)==2):
            Ctitle = title[0]
            data.append(Ctitle)
            Ftitle = title[1]
            Ftitle = title[1].replace("/", "")
            Ftitle = "".join(Ftitle.split())
            data.append(Ftitle)
        else:
            Ctitle = title[0]
            data.append(Ctitle)
            Ftitle = " "
            data.append(Ftitle)
        link = re.findall(findLink,item)[0]
        data.append(link)
        srclink = re.findall(findSrclink,item)[0]
        data.append(srclink)
        grade = re.findall(findGrade,item)[0]
        data.append(grade)
        judge = re.findall(findJud,item)[0]
        data.append(judge)
        inq = re.findall(findInq,item)[0]
        data.append(inq)
        bd = re.findall(findBd,item)[0]
        bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd)
        bd = re.sub("/"," ",bd)
        bd = "".join(bd.split())
        data.append(bd)
        datalist.append(data)
    print(datalist)            #测试所有列表是否被打印
    

    数据存储

    本地excel保存

    import xlwt
    workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)
    worksheet = workbook.add_sheet("豆瓣电影250")
    col = ["中文名", "外文名", "电影链接", "图片链接", "评分", "评价人数", "概评", "概述"]
    for i in range(0, 8):
        worksheet.write(0, i, col[i])
    for i in range(len(datalist)):
        for j in range(0, 8):
            worksheet.write(i + 1, j, datalist[i][j])
    workbook.save("豆瓣top250_firstPage.xls")
    

    sqlite数据库保存

    import sqlite3
    def init_db(dbpath):
        sql = '''
            create table movie250 
            (
            id integer primary key autoincrement,
            info_link text,
            pic_link text,
            cname varchar,
            ename varchar,
            score numeric ,
            rated numeric ,
            instroduction text,
            info text
            )
        '''  # 创建数据表
        conn = sqlite3.connect(dbpath)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
    
    def saveData2DB(datalist, dbpath):
        #init_db(dbpath)
        conn = sqlite3.connect(dbpath)
        cur = conn.cursor()
        for data in datalist:
            for index in range(len(data)):
            	data[index] = '"' + data[index] + '"'
            sql = '''
                    insert into movie250 (
                    info_link,pic_link,cname,ename,score,rated,instroduction,info) 
                    values(%s)''' % ",".join(data)
            cur.execute(sql)
            conn.commit()
        cur.close()
        conn.close()
    saveData2DB(datalist,"movie.db")
    

    结果展示

    在这里插入图片描述
    在这里插入图片描述

    数据可视化

    Flask

    Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask使用BSD授权。 Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
    简单来说在此项目中,Flask框架给我们提供了一个本地网页平台展示数据。我们根据不同的路由地址进行到不同的页面访问。如下图是首界面,通过不同的链接地址可以实现页面跳转,当然只是本地!
    在这里插入图片描述

    Echarts

    Echarts是一个纯基于js的图表库,可以流畅的运行在 PC 和移动设备上。在本项目中可以将数据进行统计分类从而用不同的展示方法进行展现。在Echarts中可以支持的图表类型有很多,同时其有一个很好的点在于它能满足我们实时修改查看,最终形成自己想要的图,便将js代码复制粘贴到我们所需要的网页代码的地方。
    由于在页面内有动态显示,所以不在进行展示。

    WordCloud

    词云展示方法是近些年来较为常用的数据可视化方法。其主要是通过分词技术将一篇文章或者一段话分成若干单词,然后统计这些词出现的频率,我们根据自定义化设置画布和这些词出现的颜色大小等等来得到某个词云。词云中重要的是画布的配置、自己所要定义的形式是什么样子,其他更多的是某些固定的方法。下图为我通过爬取毛不易的歌词内容获得毛不易的歌词词云图,如果需要此项目源码或者方法请私信。
    在这里插入图片描述

    新手问题总结与解决方法

    ip被封

    ip被封可能是新手在爬虫学习阶段遇到的最大的问题。首先如果是初学想要尽快实现一些成果时,建议在合理范围内减少爬取次数,如果我们能获得网页内容了首先将其存到本地文件夹下进行后续的测试和解析。俗话说:上有政策下有对策,面对ip被封:基础阶段我们可以添加请求头,尽可能的进行伪装像一个浏览器在访问;再进一步我们可以自己构建代理ip函数,仿照源码添加免费ip,构建handler处理器使用opener方法也可以;如果有能力的话,可以学习代理ip池的方法来解决该问题。
    当然,爬虫我们是要在合法范围内进行抓取,如果某些数据是机密或者不能访问的,我们还一直访问可能就很快有自己的小手镯子了🔓。我们只爬取我们可以访问到的,爬虫只是提高效率,不是翻过禁墙。

    查看网页源码和"F12 Elements"后不一致

    该问题可以总结为用一般方法有些需要的元素抓取不到。在本次项目中我们爬取的页面是静态网页所以可以直接抓取,但是对于动态网页就会无能为力。
    查看网页源码:最原始的代码,指的是服务器直接发送到浏览器的代码。
    F12检查元素:js渲染后的代码。而确实的部分就是js所渲染的。
    如果我们想要抓取这部分代码可以采取以下两种方法:

    1. 在页面上进行抓包,获取表单的元素和js链接提交请求
    2. 通过selenium技术,模拟用户打开网页,进行自动化的抓取。

    其他问题

    以上两个问题是我在这个项目中所遇到的,当然在面对更复杂的爬虫工作时,会有更加繁琐的问题出现。还有一些其他问题,我将其总结为基础知识问题。在很多初学的时候,我们获得的数据往往以不同的格式进行存储,但是某些方法只能针对某些固定数据格式,这些需要我们提起注意;还有就是我们不可避免的马虎问题,关键词拼写错误,变量书写错误等等,这些最好的解决办法就是孰能生巧。
    最后就是建议大家在完成一个项目时选择分块按照不同的模块去练习测试,最终完成项目。

    展开全文
  • 网贷数据爬取及分析

    千次阅读 热门讨论 2018-01-23 22:59:15
    源码地址数据爬取抓包分析抓包工具主要使用chrome的开发者工具 网络一栏,网贷之家的数据全部是ajax返回json数据,而人人贷既有ajax返回数据也有html页面直接生成数据。请求实例 从数据中可以看到请求数据的方式(G
  • 主要介绍了Python基于pandas获取网页表格数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Day01 数据爬取并可视化数据

    千次阅读 多人点赞 2020-04-01 13:51:32
    可视化,是一种利用计算机图形和图像处理技术,将数据转换成图像在屏幕上显示出来,再进行交互处理的理论、方法和技术。 本次实践基于丁香园公开的统计数据,实现新冠疫情可视化,包括疫情地图、疫情增长趋势图、...
  • 看代码中的使用:爬取好段子 xpath 解析网页 什么是xpath ? xml: 可扩展标记语言,用来传输和存储数据。他的标签没有预定义,要自己定义标签。 与html的区别: html是用来显示数据的,html的标签是固定的 xpath: 是...
  • Python爬取网页数据

    万次阅读 多人点赞 2018-08-29 17:20:35
    爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:pyCharm 库:requests、lxml 大概介绍一下,这俩库主要为我们做什么服务的 requests:获取网页源代码 lxml:...
  • 天气预报是我们日常生活中接触和使用频度比较高的一种数据类型, 国家和各个地方也都设立了相应的专责机构负责气象数据的解析、处理和预报发布等工作,今天本文主要是对中央气象台网站中实时更新和发布的数据进行...
  • 传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。因为传统的在传输数据格式方面,使用的是XML语法。因此叫做AJAX,其实现在数据交互基本上都是使用JSON。使用AJAX加载的数据,即使使用了JS,将...
  • Python selenium Boss直聘数据爬取(仅供学习使用)

    千次阅读 热门讨论 2020-06-03 20:06:15
    写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家 一、pip selenium/bs4、下载chromedriver.exe 下载命令pip ...
  • 众所周知,学习一门语言最首先的就是配置环境,在学习python时,首先配置的就是python的版本与pip...安装pip时有常见的问题[pip常见问题处理](http://blog.sina.com.cn/s/blog_3fe961ae0100zgav.html) 接下来就是安装
  • Python系列爬虫之携程旅游景点数据爬取与可视化

    千次阅读 多人点赞 2021-04-13 08:00:12
    今天我们就用爬虫携程旅游景点数据爬取与可视化并做简单的数据可视化分析呗。让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: bs4模块; jieba模块; pyecharts模块; wordcloud模块; requests模块; ...
  • 最近工作要收集点酒店数据,就到携程上看了看,记录爬取过程去下1.根据城市名称来分类酒店数据,所以先找了所有城市的名称 在这个网页上有http://hotels.ctrip.com/domestic-city-hotel.html从网站地图上可以很容易...
  • python3爬取新浪微博所有评论数据

    千次阅读 2019-11-22 15:53:25
    python3爬取新浪微博所有评论数据 该项目主要根据具体某篇微博的网址,得到其下所有评论的信息,包括评论用户名,评论人的主页网址,评论时间,内容;然后存储在csv中(仅供学习) 原理:微博的评论数据是通过服务器...
  • 58同城数据爬取+可视化分析

    千次阅读 2021-01-04 20:33:31
    一、数据爬取爬虫这一块是利用requests来实现的,并通过BeautifulSoup4实现解析。.我选取的是58同城上广州地区各个价格区间的个人房源。2.这里我进行了两层爬虫,第一层是爬取房源列表的数据,爬到的每条房源数据都...
  • 本专栏是以杨秀璋老师爬虫著作《Python网络数据爬取及分析「从入门到精通」》为主线、个人学习理解为主要内容,以学习笔记形式编写的。 本专栏不光是自己的一个学习分享,也希望能给您普及一些关于爬虫的相关知识...
  • 空气质量指数月统计历史数据爬取

    千次阅读 热门讨论 2020-09-06 08:31:04
    不到20行代码爬取 空气质量指数月统计历史数据爬取
  • python爬取妹纸图片

    千次阅读 2019-10-10 23:29:50
    初学python,刚好看到爬取妹纸图片的教学视频,于是跟着学习学习python网络爬虫,使用python爬取图片。 进入主页,可以看到妹子自拍,一共446页之多 0.0 ,如下图所示: 查看网页url可以发现comment-page-xxx,...
  • 携程酒店数据爬取(新)

    千次阅读 2020-12-01 19:36:44
    携程酒店数据爬取(新) 前言:由于携程网页的变化,以及不断的反击爬虫,导致目前许多携程的爬虫代码无法爬取到数据。 本文核心:根据更换cookies的值得到携程酒店数据
  • Python数据爬取以及可视化展示

    千次阅读 2020-01-09 17:20:23
    2. 数据爬取实践 爬取天天基金网上某个基金数据,存储到本地,查询数据,可视化展示,其实可以直接查询数据解析直接可视化展示就行了,这里加了两步数据库操作主要是为了实践练习。 通过该查询地址获取解析...
  • 格式化,具有标签的数据信息是具有非常大的分析意义的,然而,靠人工是完成对的海量数据的采集代价太大,所以对于结构化的数据采集,使用爬虫是一个非常高效的选择 技术储备: 可以使用爬虫的语言有很多种,但在学习爬虫...
  • 携程酒店数据爬取2020.5

    千次阅读 热门讨论 2020-05-27 23:38:50
    携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码。然后我这个菜b贪方便,直接copy源码的xpath,直接在xpath helper改改规则,结果一...
  • 本文基于这个问题,针对51job招聘网站,爬取了全国范围内大数据、数据分析、数据挖掘、机器学习、人工智能等相关岗位的招聘信息。分析比较了不同岗位的薪资、学历要求;分析比较了不同区域、行业对相关人才的需求...
  • 爬取网站:https://www.phb123.com/city/renkou/rk.html # 导入相关函数包 import requests from bs4 import BeautifulSoup import pandas as pd headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)...
  • Python数据爬取数据采集常用数据爬取工具安装配置Scrpy框架 数据采集 数据来源 从网上爬取数据(crawling) 从文件系统收集数据(scraping) 文件、数据库等 网络数据采集模型 常用数据爬取工具 第三方库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,904
精华内容 10,361
关键字:

数据爬取需要学html