开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Computer Science
Computer Science

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了,但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。     因此,在一些特定的网站上,我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构,甚至是处理已经完成界面展示的数据了。 Selenium 与BeautifulSoup和Scrapy相比,Selenium是一个不同的工具。 Selenium 并不是为网络爬取而生的。它实际上是为网络测试而开发的。Selenium被用于网络应用程序的自动化测试。 它使网络浏览器自动化,你可以用它来代表你在浏览器环境中进行操作。然而,它后来也被纳入了网络爬取的范畴。Selenium可以发送网络请求,还带有一个分析器。通过Selenium,你可以从HTML文档中提取数据,就像你使用Javascript DOM API那样。 Selenium的主要优势在于它能加载Javascript,并能帮助你访问JavaScript背后的数据,而不一定要自己经历发送额外请求的痛苦。这使得Selenium不仅对自己有用,而且对其他工具也有用。 使用Scrapy或BeautifulSoup 的网络爬虫如果需要只有在加载Javascript文件时才能获得的数据,就会使用Selenium。 Selenium 会启动一个浏览器,同时在这个浏览器中进行操作的模拟。 同时 Selenium 还具有 HTML 的 DOM 分析能力,通过选择器,你可以选择需要的数据。 Scrapy Scrapy是一个网络抓取框架,它配备了大量的工具,使网络抓取和爬取变得简单。它在设计上是多线程的,并建立在Twisted之上。Twisted是一个异步网络框架,遵循对服务器的非阻塞I/O调用。因为它是多线程和非阻塞的,所以它在性能方面实际上是最好的,实际上是3个工具中最快的。Scrapy比这三个工具的一个优势是,它带有发送请求和解析响应的模块。 Scrapy 是开发复杂的网络抓取和爬虫工具,因为你可以创建大量的工作者,而且每个工作者都能毫不费力地工作。它的建立是为了消耗更少的内存,并将CPU资源的使用降到最低。事实上,一些基准测试表明,Scrapy在抓取方面比其他工具快20倍。它是可移植的,而且其功能可以扩展。 与Scrapy相关的主要问题是,它不是一个以初学者为中心的工具。 Scrapy 的文档比较难读,学习曲线也比较陡峭,我不认为这个工具比较适合初学者来使用。 Scrapy的一个主要缺点是它不能渲染 JavaScript;你必须发送 Ajax 请求来获取隐藏在JavaScript事件后面的数据。 这种情况对当前前后端分离的技术来说,还是有点麻烦的,我们必须要比较清楚的分析 AJAX 的数据请求。 BeautifulSoup 对应 Java 世界来说,Java 会有一个 JSoup。 一个针对 HTML 的 Dom 文件分析器和选择器,BeautifulSoup 在Python 中做了同样的工作。 通过让你对 HTML 界面中的内容进行分析和处理以便于能够从中获取数据。 比如说,如果界面中有表格,在表格中有数据,我们需要获取的就是表格中的数据的话,就可以使用 DOM 分析工具来进行分析。 总结 因最近我们在对爬虫的使用进行研究,对上面 3 个框架都有了一些探讨。 个人觉得比较简单的还是 Selenium,同时 Selenium 也足够强大,能够满足我们对一些小网站的爬虫分析。   https://www.isharkfly.com/t/python/14987

2023年09月20日 0Comments 432Browse 0Like Read more
Computer Science

Python 如何创建一个 JSON 对象

我们可以使用下面的代码来在 Python 中创建一个 JSON 对象。 import json data = {} data['key'] = 'value' json_data = json.dumps(data) 上面的代码中,首先导入的是 json 使用的包。 然后定义一个 data 数据类型。 在定义好 data 数据类型后,可以使用 data['key'] = 'value' 就可以设置数据到 data JSON 对象中。 然后,json.dumps() 将Python的字典数据转换成 JSON 字符,数据的最外面都添加一层""变为字符串,这也是数据的序列化步骤。     因为有时候,我们需要 Dump 成字符串以便于能够和其他系统进行通信。 https://www.isharkfly.com/t/python-json/14985

2023年09月19日 0Comments 622Browse 0Like Read more
Computer Science

Python 遍历 JSON 数据结构

有时候不得不说 Python的遍历还是非常简单的。 responseData = r.json() 这句话是把我们请求的 http 返回对象转换为 Json 对象。 我们的 Json List 在列表 (responseData['Data'] 中。 我们只需要使用:for policyList in json.loads(responseData['Data']):·   这句话就可以完成数据的遍历了。 https://www.isharkfly.com/t/pthon-json/14976

2023年09月19日 0Comments 401Browse 0Like Read more
Computer Science

Python 如何把 String 转换为 Json 对象

在我们对 JSON 进行处理的时候,大概率我们会需要把字符串转换为 JSON 对象后才能进行处理。 Python 贴心的使用 json.loads(employee_string) 就可以了。 首先需要做的就是导入 JSON 库。 #include json library import json 对现代程序员来说,JSON 数据结构基本上是非常常见的数据结构了,几乎所有语言都可以处理。 #include json library import json #json string data employee_string = '{"first_name": "Michael", "last_name": "Rodgers", "department": "Marketing"}' #check data type with type() method print(type(employee_string)) #convert string to object json_object = json.loads(employee_string) #check new data type print(type(json_object)) 上面的代码就可以直接让 Python 把字符串转换为 JSON 的对象了。   当我们完成转换后,就可以对 JSON 的对象进行相关操作了。   https://www.isharkfly.com/t/python-string-json/14977

2023年09月19日 0Comments 441Browse 0Like Read more
Computer Science

Python 如何for loop 循环

我们都知道,在 Java 的时候如果需要使用 for loop 循环,首先需要定义一个 i,然后进行循环。 比如说,我们要循环 1 到 501,Java 的代码为: for(int i=1; i<501; i++) Python 把这个循环进行简化了。 我们可以使用下面的代码来在 Python 中执行循环:for i in range(1, 501):   = 直接使用一个 range 函数。   start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5); stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5   https://www.isharkfly.com/t/python-for-loop/14978

2023年09月19日 0Comments 621Browse 0Like Read more
Computer Science

Python 爬虫使用 Selenium 如何在 WebElement 获得属性

首先,我们需要初始化驱动和指定使用特定的流量器。   代码如下:   from selenium import webdriver wd = webdriver.Firefox() 上面的代码可以简单的理解为启动一个 Firefox 的实例。 使用 css 选择器 可以把程序读取的 HTML 理解为一个 Doc。 我们需要在 Doc 中选择我们的元素,这个叫做选择器,通常来说 HTML 很多不同的选择器。 elem = wd.find_element_by_css_selector('#my-id') 上面的代码是使用 css 的选择器。 获得属性 但我们使用选择器获得元素后,下一步就是我们需要获得属性了。 Python 的代码为: element.get_attribute('innerHTML') 这样我们就可以通过元素获得属性了。   https://www.isharkfly.com/t/python-selenium-webelement/14980

2023年09月19日 0Comments 512Browse 0Like Read more
Computer Science

Discourse 是否应该设置登录查看

如题,我在论坛里搜索,只查到更改类别的安全性,但这样只会使全部类别都不可见,并不是我需要的功能。 我的使用情景是: 未注册用户可以查看一部分帖子内容,隐藏部分的内容只能登录才能查看。或者注册用户,需回复帖子才能查看。 这是一个吸引注册的手段,也是防止大部分的伸手党。 类似于下面的情况。 这个需求在 Discuz 的时代非常容易实现,这有就是导致 DISCUZ 的论坛到处需要注册的原因。 其实我们也有这种需求,但是感觉这种需求也不是非常必要。 我们觉得这个和不同的社区类型有很大的关系,如果你的社区属于开放性的,其实这样感觉意义不大。 比如说类似出国留学的一亩三分地,所有的内容注册都不行,还要花钱,感觉是非常烦躁,并且把用户的信息内容据为己有,从上商业上来说可行,但也许不是非常好。 插件方式 根据官方论坛中针对这个问题的讨论:如何实现登录查看内容的功能,为了更好的吸引用户注册 - support - Discourse Meta 这个插件已经废弃掉了,不再使用了。 所以我们这里也不进行测试安装了。     使用组件 如果您还是想使用这个功能的话,您还可以使用下面这个组件。 组件的官方地址为:Gated Topics in Category - theme-component - Discourse Meta 组件的安装非常简单,通过 Git 代码的方式进行安装。     安装后的效果情况。 需要针对使用的主题,应用这个插件。     安装插件后运行的结果如下:     通过运行上面的插件,能够让用户登录后进行查看内容。 总结 根据我们网站的使用情况了解,针对一个特定的网站,主题的查看数量是非常重要的一个参数。 如果一个主题的阅读数量每次发布一定时间类超过几百,通常这个社区还是有比较大的吸引力的,至于用户是否在社区中注册,我们认为并不能阻止用户的的访问。 另外,因为我们多是计算机技术和旅游类的内容,这些内容专业性比较强,需要吸引更多的用户参与。 所以,我们网站觉得这个功能并不是非常有意义,同时还会降低搜索引擎的索引内容。 https://www.isharkfly.com/t/discourse/14983?preview_theme_id=11

2023年09月19日 0Comments 538Browse 0Like Read more
Computer Science

Discourse API 提交的 ID 是哪个 ID

如下图,我们通过 API 提交了一个 Post 请求。 上面有返回数据。 在返回数据中几个 ID,上图返回的第一个 Id 实际上是 POST ID,在 POST 上面还对应了一个 Topic ID。     这个 2 个 ID,在我们使用 Discourse 进行数据处理的时候通常需要上面 2 个 ID。   https://www.isharkfly.com/t/discourse-api-id-id/14975

2023年09月19日 0Comments 489Browse 0Like Read more
Computer Science

Discourse 调用提示 ["BAD CSRF"] 错误

网站是可以正常访问的,但是 API 调用的时候提示错误:["BAD CSRF"]     问题和解决 上面的问题在 API 的 Key 和用户名的问题。 我们使用的下划线,正常应该使用的是横杆,而不是下划线。 -H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \ -H "Api-Username: discourse1" \ 当改成上面的配置后就没有问题,同时需要注意的是不区分大小写。   https://www.isharkfly.com/t/discourse-bad-csrf/14974

2023年09月19日 0Comments 507Browse 0Like Read more
Computer Science

Html 如何查找 xPath

xPath 是我们在 HMTL 中定位元素的最常用办法。 在浏览器中打开 F12 调试窗口,然后右键找到你需要定位的 td 标签。     在代码中,找到 Copy,在 Copy 下面有一个 xPath。 粘贴到记事本中。 例如,我们上面拷贝的 xPath 为: //*[@id="ember160"]/td[1] 这个就是你需要的的 xPath 路径了。   https://www.isharkfly.com/t/html-xpath/14973

2023年09月18日 0Comments 617Browse 0Like Read more
1…3940414243…237
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (512)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1