有时候不得不说 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
有时候不得不说 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
在我们对 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
我们都知道,在 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
首先,我们需要初始化驱动和指定使用特定的流量器。 代码如下: 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
如题,我在论坛里搜索,只查到更改类别的安全性,但这样只会使全部类别都不可见,并不是我需要的功能。 我的使用情景是: 未注册用户可以查看一部分帖子内容,隐藏部分的内容只能登录才能查看。或者注册用户,需回复帖子才能查看。 这是一个吸引注册的手段,也是防止大部分的伸手党。 类似于下面的情况。 这个需求在 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
如下图,我们通过 API 提交了一个 Post 请求。 上面有返回数据。 在返回数据中几个 ID,上图返回的第一个 Id 实际上是 POST ID,在 POST 上面还对应了一个 Topic ID。 这个 2 个 ID,在我们使用 Discourse 进行数据处理的时候通常需要上面 2 个 ID。 https://www.isharkfly.com/t/discourse-api-id-id/14975
网站是可以正常访问的,但是 API 调用的时候提示错误:["BAD CSRF"] 问题和解决 上面的问题在 API 的 Key 和用户名的问题。 我们使用的下划线,正常应该使用的是横杆,而不是下划线。 -H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \ -H "Api-Username: discourse1" \ 当改成上面的配置后就没有问题,同时需要注意的是不区分大小写。 https://www.isharkfly.com/t/discourse-bad-csrf/14974
xPath 是我们在 HMTL 中定位元素的最常用办法。 在浏览器中打开 F12 调试窗口,然后右键找到你需要定位的 td 标签。 在代码中,找到 Copy,在 Copy 下面有一个 xPath。 粘贴到记事本中。 例如,我们上面拷贝的 xPath 为: //*[@id="ember160"]/td[1] 这个就是你需要的的 xPath 路径了。 https://www.isharkfly.com/t/html-xpath/14973
下载 chromedriver 从官方网站上下载 chromedriver 的版本,这个版本需要和你 Chrome 的版本对应上。 下载的地址为:ChromeDriver - WebDriver for Chrome - Downloads 这个地方,将会打开一个新的浏览器界面,Chrome for Testing availability 在这个新的浏览器界面中,我们能看到对应的 Chrome 版本号。 查看 Chrome 版本 通过查看 Chrome 的版本来查看关于的信息。 通过这个 Chrome 的版本来下载 chromedriver 的版本。 解压到特定目录 解压到特定的目录后就可以使用了。 Python 代码 如果需要在 python 中直接进行使用。 需要导入的包: from selenium.webdriver import Chrome from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait 使用代码来进行运行浏览器 chrome = Chrome(service=Service(r"C:\Users\yhu\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe")) chrome.get('https://www.isharkfly.com/') 通过上面的代码就可以在 chromedriver 上打开浏览器后查看下载的原始内容。 如果你有 IDE 的断点调试功能的话,这个使用应该可以查看断点中的内容。 上图是运行代码后,通过断点查看对象中访问网站的内容。 https://www.isharkfly.com/t/windows-chromedriver-python/14971#chromedriver-1
Python 中可以属性来查看需要爬取的网站的源代码。 对应具体的是:chrome.page_source 需要注意的是首先需要导入包 from selenium.webdriver import Chrome 然后进行初始化: chrome = Chrome(service=Service(r"C:\Users\yhu\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe")) 才可以使用,我们上面使用的 chrome 是我们自己在本地定义的变量。 https://www.isharkfly.com/t/chromedriver-python/14972