ajax抓取网页内容

ajax抓取网页内容

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2021-09-24 20:01 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1 简介
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。
  Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源码及实验过程
  如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:使用直观的采集和搜索客户标记功能,可以很快自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面可以在程序中。注:本文仅记录实验过程。在实际系统中,xslt 程序会以多种方式注入到内容提取器中。
  
  第二步:执行如下代码(windows10下测试,python3.2,源码下载地址可在文章末尾的GitHub上找到),请注意:xslt是比较长的字符串,如果删除这个字符串,代码不是几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取了
  
  4. 阅读下一步
  至此,我们已经演示了如何通过两个文章来抓取静态和动态的网页内容,这两个文章都使用xslt一次从网页中提取需要的内容。实际上,xslt 是一种更复杂的编程语言。如果你手动写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇文章《1分钟快速生成用于Web内容提取的Xslt》将介绍如何生成xslt。
  5.采集GooSeeker开源代码下载源码
  1.GooSeeker开源Python网络爬虫GitHub源码
  6. 文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1 简介
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。
  Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源码及实验过程
  如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:使用直观的采集和搜索客户标记功能,可以很快自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面可以在程序中。注:本文仅记录实验过程。在实际系统中,xslt 程序会以多种方式注入到内容提取器中。
  
  第二步:执行如下代码(windows10下测试,python3.2,源码下载地址可在文章末尾的GitHub上找到),请注意:xslt是比较长的字符串,如果删除这个字符串,代码不是几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取了
  
  4. 阅读下一步
  至此,我们已经演示了如何通过两个文章来抓取静态和动态的网页内容,这两个文章都使用xslt一次从网页中提取需要的内容。实际上,xslt 是一种更复杂的编程语言。如果你手动写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇文章《1分钟快速生成用于Web内容提取的Xslt》将介绍如何生成xslt。
  5.采集GooSeeker开源代码下载源码
  1.GooSeeker开源Python网络爬虫GitHub源码
  6. 文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址

ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-09-22 12:07 • 来自相关话题

  ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)
  可能有一个朋友会奇怪,网站 @ @ @ @ @ @ @ of你让搜索引擎,你怎么能让网站页面内容没有被捕?
  首先,可以分开的重量是有限的,即使是PR10站,也是不受限制的中间的。这种权重包括其他人网站和网站的内链。
  以下内容,除非它是一个想要被束缚的人。否则外链是让搜索引擎捕获。这不属于本文的范围。
  和内链,因为某些网站有很多重复或冗余内容。例如,一些搜索结果按照条件。特别是一些B2C站,在专门查询页面或所有产品页面的某些位置,您可以按产品类型,型号,颜色,大小等分类。虽然这些页面对于观众来说很方便,但是对于搜索引擎来说,这是蜘蛛的非常大的抓取时间,尤其是网站页面。与此同时,页面权将被分散,SEO是不利的。
  不同的网站 management登录页面,备份页面,测试页等,并且网站管理员不希望搜索引擎收录。
  所以需要让网页或某些页面不是收录。
  作者将首先介绍一些方式:
  1. @k展不被收录 / p>
  众所周知,搜索引擎的容量有限的闪存的内容,并且Flash内的所有内容都不能完全抓取。但遗憾的是,不可能完全保证闪存的所有内容都不会被捕获。因为谷歌和Adobe正在努力实施Flash履带技术。
  2.使用Robos文件
  这是一种临时最有效的方式,但是有很大的缺点。只是不通过任何内容和链接。每个人都知道SEO中的一个健康页面应该可用。有一个连接到外链的链接,还有一个连接到外部网站的链接,所以可以控制机器人文件,以便搜索引擎不知道内容是什么。此页面将设置为低质量页面。体重可能受到某些惩罚的惩罚。这主要用于网站管理页面,测试页等。
  3.使用nofollow标签包不想在收录 @ / p>
  此方法并不完全保证它不是收录,因为这不是严格需要遵守的标签。此外,如果有一个带有nofollow标记的页面的外部网站链条。这很可能被搜索引擎捕获。
  4.使用meta noindex tab plus关注标记
  此方法可以防止收录并且也可以通过重量。你想通过,看看网站建立一个网站管理员自己的需求。这种方法的缺点是它也是蜘蛛的巨大浪费。
  5.在使用机器人文件显示页面上的iframe标签显示搜索引擎收录可以阻止除iframe标记之外的内容来自收录。因此,您可以将内容放在正常页面标签下我不想收录。我希望被收录 收录。
  遵循,然后说该方法无效,请勿将来使用这些方法。
  1. table
  谷歌和百度已经捕获了表单使用的内容,无法停止收录。
  2.使用javascript和ajax技术
  与目前的技术,Ajax和JavaScript的结果目前以HTML的形式将HTML的结果定义为浏览器,因此这也无法阻止收录。 查看全部

  ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)
  可能有一个朋友会奇怪,网站 @ @ @ @ @ @ @ of你让搜索引擎,你怎么能让网站页面内容没有被捕?
  首先,可以分开的重量是有限的,即使是PR10站,也是不受限制的中间的。这种权重包括其他人网站和网站的内链。
  以下内容,除非它是一个想要被束缚的人。否则外链是让搜索引擎捕获。这不属于本文的范围。
  和内链,因为某些网站有很多重复或冗余内容。例如,一些搜索结果按照条件。特别是一些B2C站,在专门查询页面或所有产品页面的某些位置,您可以按产品类型,型号,颜色,大小等分类。虽然这些页面对于观众来说很方便,但是对于搜索引擎来说,这是蜘蛛的非常大的抓取时间,尤其是网站页面。与此同时,页面权将被分散,SEO是不利的。
  不同的网站 management登录页面,备份页面,测试页等,并且网站管理员不希望搜索引擎收录。
  所以需要让网页或某些页面不是收录。
  作者将首先介绍一些方式:
  1. @k展不被收录 / p>
  众所周知,搜索引擎的容量有限的闪存的内容,并且Flash内的所有内容都不能完全抓取。但遗憾的是,不可能完全保证闪存的所有内容都不会被捕获。因为谷歌和Adobe正在努力实施Flash履带技术。
  2.使用Robos文件
  这是一种临时最有效的方式,但是有很大的缺点。只是不通过任何内容和链接。每个人都知道SEO中的一个健康页面应该可用。有一个连接到外链的链接,还有一个连接到外部网站的链接,所以可以控制机器人文件,以便搜索引擎不知道内容是什么。此页面将设置为低质量页面。体重可能受到某些惩罚的惩罚。这主要用于网站管理页面,测试页等。
  3.使用nofollow标签包不想在收录 @ / p>
  此方法并不完全保证它不是收录,因为这不是严格需要遵守的标签。此外,如果有一个带有nofollow标记的页面的外部网站链条。这很可能被搜索引擎捕获。
  4.使用meta noindex tab plus关注标记
  此方法可以防止收录并且也可以通过重量。你想通过,看看网站建立一个网站管理员自己的需求。这种方法的缺点是它也是蜘蛛的巨大浪费。
  5.在使用机器人文件显示页面上的iframe标签显示搜索引擎收录可以阻止除iframe标记之外的内容来自收录。因此,您可以将内容放在正常页面标签下我不想收录。我希望被收录 收录。
  遵循,然后说该方法无效,请勿将来使用这些方法。
  1. table
  谷歌和百度已经捕获了表单使用的内容,无法停止收录。
  2.使用javascript和ajax技术
  与目前的技术,Ajax和JavaScript的结果目前以HTML的形式将HTML的结果定义为浏览器,因此这也无法阻止收录。

ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2021-09-22 12:05 • 来自相关话题

  ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)
  什么是用于动态网页数据捕获的Ajax:
  Ajax(异步JavaScript和XML)异步JavaScript和XML。Ajax可以通过在后台与服务器交换少量数据来实现web页面的异步更新。这意味着可以在不重新加载整个网页的情况下更新网页的一部分。如果需要更新内容,传统web页面(没有Ajax)必须重新加载整个web页面。因为传统的传输数据格式使用XML语法。因此,它被称为Ajax。事实上,现在数据交互基本上使用JSON。使用Ajax加载的数据,即使使用了JS,也会呈现到浏览器中。右键单击->查看网页源代码时,仍然无法看到通过Ajax加载的数据。您只能看到使用此URL加载的HTML代码
  如何获取ajax数据:直接分析ajax调用的接口。然后通过代码请求这个接口。使用selenium+chromedriver模拟浏览器行为并获取数据
  模式
  优势
  缺点
  分析接口
  可以直接请求数据。不需要进行一些解析。代码少,性能高
  分析接口比较复杂,特别是一些通过JS混淆的接口。你应该有一个特定的JS基金会。作为爬行动物很容易被发现
  硒
  直接模拟浏览器的行为。如果浏览器可以请求,您也可以使用selenium进行请求。爬行动物更稳定
  很多代码。低性能
  Selenium+chromedriver可获得动态数据:
  硒是一个机器人。它可以模拟浏览器上的一些人类行为,并自动处理浏览器上的一些行为,如单击、填充数据、删除cookie等。Chromedriver是Chrome浏览器的驱动程序。只有使用它才能驱动浏览器。当然,不同的浏览器有不同的驱动程序。下面列出了不同的浏览器及其相应的驱动程序:
  Chrome:Firefox:Edge:Safari:install selenium:selenium有多种语言,包括Java、ruby、python等。我们可以下载python版本。PIP安装selenium安装chromedriver:下载后,未经许可将其放入纯英文目录。安装selenium和chromedriver:快速入门:
  from selenium import webdriver
# chromedriver的绝对路径
driver_path = r'D:\ProgramApp\chromedriver\chromedriver.exe'
# 初始化一个driver,并且指定chromedriver的路径
driver = webdriver.Chrome(executable_path=driver_path)
# 请求网页
driver.get("https://www.baidu.com/")
# 通过page_source获取网页源代码
print(driver.page_source)
  Selenium常见操作:
  更多教程参考:
  关闭页面:驱动程序。Close():关闭当前页面。司机。退出():退出整个浏览器。定位元素:
  请注意,find_u元素是满足条件的第一个元素。find_u元素是获取所有满足条件的元素
  find_element_by_id:根据id来查找某个元素。等价于:
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
find_element_by_class_name:根据类名查找元素。 等价于:
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
find_element_by_name:根据name属性的值来查找元素。等价于:
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
find_element_by_tag_name:根据标签名来查找元素。等价于:
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
find_element_by_xpath:根据xpath语法来获取元素。等价于:
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
find_element_by_css_selector:根据css选择器选择元素。等价于:
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
  行动形式要素:
  操作输入框:分为两步。步骤1:找到这个元素。步骤2:使用发送键(值)填写数据。示例代码如下所示:
  inputTag=driver.find u元素uu按u id('kw')查找
  inputTag.send ukeys('python'))
  使用“清除”方法清除输入框的内容。示例代码如下所示:
  输入ag.clear()
  操作复选框:由于要选择复选框选项卡,请在网页中单击它。因此,如果要选择复选框标记,请先选择标记,然后执行click事件。示例代码如下所示:
  rememberTag=driver.find uu元素uu按名称(“rememberMe”)
  记住标记。单击()
  选择:不能直接单击选择元素。因为您需要在单击后选择图元。此时,selenium为select标记提供了一个类selenium.webdriver.support.ui.select。将获取的元素作为参数传递给此类以创建此对象。以后可以使用此对象进行选择。示例代码如下所示:
  从selenium.webdriver.support.ui导入选择
  #选中此选项卡并使用“选择”创建对象
  selectTag=Select(驱动程序。按名称查找元素(“跳转菜单”))
  #按索引选择
  selectTag.select按索引(1)
  #按值选择
  选择标签。按值(“”)选择标签
  #基于可视文本进行选择
  Selecttag.select通过可视文本(“95显示客户端”)
  #取消选中所有选项
  选择Tag.取消选择_all()
  操作按钮:操作按钮有很多种方式,如点击、右击、双击等,最常用的方式之一是点击,直接调用点击功能即可,示例代码如下:
  inputTag=驱动程序。通过\u id('su')查找\u元素\u
  inputTag.click()
  行为链:
  有时页面上的操作可能需要很多步骤,因此您可以使用鼠标行为链类actionchains来完成。例如,现在您希望将鼠标移动到元素上并执行单击事件。示例代码如下:
  inputTag = driver.find_element_by_id('kw')
submitTag = driver.find_element_by_id('su')
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
  还有更多与鼠标相关的操作
  Cookie操作:
  获取所有的cookie:
for cookie in driver.get_cookies():
print(cookie)
根据cookie的key获取value:
value = driver.get_cookie(key)
删除所有的cookie:
driver.delete_all_cookies()
删除某个cookie:
driver.delete_cookie(key)
  页面等待:
  如今,越来越多的web页面采用Ajax技术,因此程序无法确定元素何时完全加载。如果实际页面等待太长时间,导致DOM元素无法出现,但您的代码直接使用web元素,则会抛出空指针异常。为了解决此问题,selenium提供了两种方法HOD,如等待模式:一种是隐式等待,另一种是显式等待
  隐式等待:调用driver.implicitly\u wait。然后等待10秒,然后获取不可用的元素。示例代码如下
  driver = webdriver.Chrome(executable_path=driver_path)
driver.implicitly_wait(10)
# 请求网页
driver.get("https://www.douban.com/")
  2/显示等待:显示等待表示在建立条件之前不执行获取元素的操作。您还可以指定等待的最长时间。如果超过此时间,将引发异常。应使用selenium.webdriver.support.excepted的预期条件完成显示等待_conditions和selenium.webdriver.support.ui.webdriverwait示例代码如下:
   from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
  其他一些等候条件:
  参考更多条件:
  切换页面:
  有时窗口中有许多子选项卡页。此时,必须切换
  Selenium提供了一个switch_to_窗口来切换。要切换到的特定页面可以在driver.window_句柄中找到。示例代码如下:
  # 打开一个新的页面
self.driver.execute_script("window.open('https://www.baidu.com')")
#显示当前页面的url
driver.current_url //还是百度页面
# 切换到这个新的页面中
driver.switch_to_window(driver.window_handles[1])
  设置代理IP:
  有时候我们会经常抓取一些网页,当服务器发现你是一个抓取者时,它会阻止你的IP地址,这时我们可以更改代理IP,更改代理IP对于不同的浏览器有不同的实现方法,这里以Chrome browser为例:
  from selenium import webdriver
options = webdriver.ChromeOptions() //设置存储浏览器的信息
//添加代理服务器
options.add_argument("--proxy-server=http://110.73.2.248:8123")
driver_path = r"D:\ProgramApp\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')
  Webelement元素:
  从selenium.webdriver.remote.webelement导入webelement类是每个获取的元素所属的类
  有一些共同的属性:
  Get_attribute:此标记的属性值
  截图:获取当前页面的截图。此方法只能用于驱动程序
  驱动程序的对象类也继承自webelement 查看全部

  ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)
  什么是用于动态网页数据捕获的Ajax:
  Ajax(异步JavaScript和XML)异步JavaScript和XML。Ajax可以通过在后台与服务器交换少量数据来实现web页面的异步更新。这意味着可以在不重新加载整个网页的情况下更新网页的一部分。如果需要更新内容,传统web页面(没有Ajax)必须重新加载整个web页面。因为传统的传输数据格式使用XML语法。因此,它被称为Ajax。事实上,现在数据交互基本上使用JSON。使用Ajax加载的数据,即使使用了JS,也会呈现到浏览器中。右键单击->查看网页源代码时,仍然无法看到通过Ajax加载的数据。您只能看到使用此URL加载的HTML代码
  如何获取ajax数据:直接分析ajax调用的接口。然后通过代码请求这个接口。使用selenium+chromedriver模拟浏览器行为并获取数据
  模式
  优势
  缺点
  分析接口
  可以直接请求数据。不需要进行一些解析。代码少,性能高
  分析接口比较复杂,特别是一些通过JS混淆的接口。你应该有一个特定的JS基金会。作为爬行动物很容易被发现
  硒
  直接模拟浏览器的行为。如果浏览器可以请求,您也可以使用selenium进行请求。爬行动物更稳定
  很多代码。低性能
  Selenium+chromedriver可获得动态数据:
  硒是一个机器人。它可以模拟浏览器上的一些人类行为,并自动处理浏览器上的一些行为,如单击、填充数据、删除cookie等。Chromedriver是Chrome浏览器的驱动程序。只有使用它才能驱动浏览器。当然,不同的浏览器有不同的驱动程序。下面列出了不同的浏览器及其相应的驱动程序:
  Chrome:Firefox:Edge:Safari:install selenium:selenium有多种语言,包括Java、ruby、python等。我们可以下载python版本。PIP安装selenium安装chromedriver:下载后,未经许可将其放入纯英文目录。安装selenium和chromedriver:快速入门:
  from selenium import webdriver
# chromedriver的绝对路径
driver_path = r'D:\ProgramApp\chromedriver\chromedriver.exe'
# 初始化一个driver,并且指定chromedriver的路径
driver = webdriver.Chrome(executable_path=driver_path)
# 请求网页
driver.get("https://www.baidu.com/";)
# 通过page_source获取网页源代码
print(driver.page_source)
  Selenium常见操作:
  更多教程参考:
  关闭页面:驱动程序。Close():关闭当前页面。司机。退出():退出整个浏览器。定位元素:
  请注意,find_u元素是满足条件的第一个元素。find_u元素是获取所有满足条件的元素
  find_element_by_id:根据id来查找某个元素。等价于:
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
find_element_by_class_name:根据类名查找元素。 等价于:
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
find_element_by_name:根据name属性的值来查找元素。等价于:
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
find_element_by_tag_name:根据标签名来查找元素。等价于:
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
find_element_by_xpath:根据xpath语法来获取元素。等价于:
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
find_element_by_css_selector:根据css选择器选择元素。等价于:
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
  行动形式要素:
  操作输入框:分为两步。步骤1:找到这个元素。步骤2:使用发送键(值)填写数据。示例代码如下所示:
  inputTag=driver.find u元素uu按u id('kw')查找
  inputTag.send ukeys('python'))
  使用“清除”方法清除输入框的内容。示例代码如下所示:
  输入ag.clear()
  操作复选框:由于要选择复选框选项卡,请在网页中单击它。因此,如果要选择复选框标记,请先选择标记,然后执行click事件。示例代码如下所示:
  rememberTag=driver.find uu元素uu按名称(“rememberMe”)
  记住标记。单击()
  选择:不能直接单击选择元素。因为您需要在单击后选择图元。此时,selenium为select标记提供了一个类selenium.webdriver.support.ui.select。将获取的元素作为参数传递给此类以创建此对象。以后可以使用此对象进行选择。示例代码如下所示:
  从selenium.webdriver.support.ui导入选择
  #选中此选项卡并使用“选择”创建对象
  selectTag=Select(驱动程序。按名称查找元素(“跳转菜单”))
  #按索引选择
  selectTag.select按索引(1)
  #按值选择
  选择标签。按值(“”)选择标签
  #基于可视文本进行选择
  Selecttag.select通过可视文本(“95显示客户端”)
  #取消选中所有选项
  选择Tag.取消选择_all()
  操作按钮:操作按钮有很多种方式,如点击、右击、双击等,最常用的方式之一是点击,直接调用点击功能即可,示例代码如下:
  inputTag=驱动程序。通过\u id('su')查找\u元素\u
  inputTag.click()
  行为链:
  有时页面上的操作可能需要很多步骤,因此您可以使用鼠标行为链类actionchains来完成。例如,现在您希望将鼠标移动到元素上并执行单击事件。示例代码如下:
  inputTag = driver.find_element_by_id('kw')
submitTag = driver.find_element_by_id('su')
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
  还有更多与鼠标相关的操作
  Cookie操作:
  获取所有的cookie:
for cookie in driver.get_cookies():
print(cookie)
根据cookie的key获取value:
value = driver.get_cookie(key)
删除所有的cookie:
driver.delete_all_cookies()
删除某个cookie:
driver.delete_cookie(key)
  页面等待:
  如今,越来越多的web页面采用Ajax技术,因此程序无法确定元素何时完全加载。如果实际页面等待太长时间,导致DOM元素无法出现,但您的代码直接使用web元素,则会抛出空指针异常。为了解决此问题,selenium提供了两种方法HOD,如等待模式:一种是隐式等待,另一种是显式等待
  隐式等待:调用driver.implicitly\u wait。然后等待10秒,然后获取不可用的元素。示例代码如下
  driver = webdriver.Chrome(executable_path=driver_path)
driver.implicitly_wait(10)
# 请求网页
driver.get("https://www.douban.com/";)
  2/显示等待:显示等待表示在建立条件之前不执行获取元素的操作。您还可以指定等待的最长时间。如果超过此时间,将引发异常。应使用selenium.webdriver.support.excepted的预期条件完成显示等待_conditions和selenium.webdriver.support.ui.webdriverwait示例代码如下:
   from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading";)
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
  其他一些等候条件:
  参考更多条件:
  切换页面:
  有时窗口中有许多子选项卡页。此时,必须切换
  Selenium提供了一个switch_to_窗口来切换。要切换到的特定页面可以在driver.window_句柄中找到。示例代码如下:
  # 打开一个新的页面
self.driver.execute_script("window.open('https://www.baidu.com')")
#显示当前页面的url
driver.current_url //还是百度页面
# 切换到这个新的页面中
driver.switch_to_window(driver.window_handles[1])
  设置代理IP:
  有时候我们会经常抓取一些网页,当服务器发现你是一个抓取者时,它会阻止你的IP地址,这时我们可以更改代理IP,更改代理IP对于不同的浏览器有不同的实现方法,这里以Chrome browser为例:
  from selenium import webdriver
options = webdriver.ChromeOptions() //设置存储浏览器的信息
//添加代理服务器
options.add_argument("--proxy-server=http://110.73.2.248:8123";)
driver_path = r"D:\ProgramApp\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')
  Webelement元素:
  从selenium.webdriver.remote.webelement导入webelement类是每个获取的元素所属的类
  有一些共同的属性:
  Get_attribute:此标记的属性值
  截图:获取当前页面的截图。此方法只能用于驱动程序
  驱动程序的对象类也继承自webelement

ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)

网站优化优采云 发表了文章 • 0 个评论 • 123 次浏览 • 2021-09-21 07:37 • 来自相关话题

  ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)
  抓取前端呈现页面
  随着Ajax技术的不断普及和angularjs等单页应用框架的出现,越来越多的页面被JS呈现。对于爬虫来说,这种页面很烦人:仅提取HTML内容通常无法获得有效信息。那么如何处理这种页面呢?一般来说,有两种方法:
  在爬行阶段,浏览器内核内置到爬行器中,页面在爬行之前由JS呈现。这方面的相应工具是selenium、htmlunit或phantom JS。然而,这些工具存在一些效率问题,并且不太稳定。其优点是编写规则与静态页面相同。由于JS呈现页面的数据也是从后端获取的,基本上是通过Ajax获取的,因此分析Ajax请求并找到相应的数据请求也是可行的。此外,与页面样式相比,此界面不太可能更改。缺点是找到这个请求并模拟它是一个相对困难的过程,需要相对较多的分析经验
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法可以节省时间和精力。然而,对于长期和大规模的需求,第二个将更可靠。对于一些站点,甚至是一些JS技术,目前,第一种方法基本上是万能的,第二种方法将非常复杂
  对于第一种方法,webmagic selenium就是这样一种尝试。它定义了一个downloader,在下载页面时使用浏览器内核进行渲染。Selenium的配置很复杂,取决于平台和版本。没有稳定的计划。如果您感兴趣,可以查看我的博客:使用selenium抓取动态加载的页面
  这里主要介绍第二种方法。我希望您会发现解析前端呈现页面并没有那么复杂。这里我们以安格拉斯华人社区为例
  如何判断前端渲染
  判断页面是否以JS呈现的方法相对简单。在浏览器中直接查看源代码(windows中为Ctrl+u,MAC中为Command+Alt+u)。如果找不到有效的信息,基本上肯定会在JS中呈现
  
  
  在本例中,如果在源代码中找不到页面中的标题“优孚计算机网络-前端攻城师”,则可以断定是JS渲染,数据是通过Ajax获取的
  分析请求
  让我们转到最难的部分:查找数据请求。此步骤可以帮助我们的工具,主要是用于在浏览器中查看网络请求的开发人员工具
  以chome为例。让我们打开“开发者工具”(windows上的F12和MAC上的Command+Alt+I),然后再次刷新页面(它也可能是一个下拉页面,简而言之,所有您认为可能触发新数据的操作),然后记住保留场景并逐个分析请求
  这一步需要一点耐心,但并非没有规则可循。首先可以帮助我们的是上面的分类过滤器(所有、文档等)。如果是普通的Ajax,它将显示在XHR标记下,jsonp请求将显示在scripts标记下。这是两种常见的数据类型
  然后你可以根据数据的大小来判断。通常,结果的大小越大,越有可能是返回数据的接口。其余取决于经验。例如,这里的“最新的?P=1&s=20”乍一看是可疑的
  
  对于可疑地址,您可以查看响应主体是什么。我们无法在开发人员工具中清楚地看到它。我们将URL复制到地址栏并再次请求它(如果您安装了chrome推荐的JSON查看器,则可以方便地查看Ajax结果)。看看结果,我们似乎找到了我们想要的
  
  同样,我们转到“发布详细信息”页面,找到了对特定内容的请求:
  程序设计
  如果您回忆一下前面的列表+目标页面示例,您会发现我们这次的需求与之前的需求类似,但是它们被Ajax-Ajax列表、Ajax数据所取代,返回的数据变成JSON。然后,我们仍然可以使用最后一种方法在两页中编写:
  数据表
  在这个列表页面中,我们需要找到有效的信息来帮助我们构建目标Ajax的URL。在这里,我们看到这个ID应该是我们想要的帖子的ID,而帖子详细信息请求由一些固定URL加上这个ID组成。因此,在这一步中,我们手动构造URL并将其添加到要获取的队列中。这里,我们使用选择语言jsonpath来选择数据(webmatic扩展包中提供了jsonpathselector来支持它)
   if (page.getUrl().regex(LIST_URL).match()) {
//这里我们使用JSONPATH这种选择语言来选择数据
List ids = new JsonPathSelector("$.data[*]._id").selectList(page.getRawText());
if (CollectionUtils.isNotEmpty(ids)) {
for (String id : ids) {
page.addTargetRequest("http://angularjs.cn/api/article/"+id);
}
}
}
  目标数据
  使用URL,解析目标数据实际上非常简单。因为JSON数据是完全结构化的,所以我们节省了分析页面和编写XPath的过程。这里我们仍然使用jsonpath来获取标题和内容
   page.putField("title", new JsonPathSelector("$.data.title").select(page.getRawText()));
page.putField("content", new JsonPathSelector("$.data.content").select(page.getRawText()));
  有关此示例的完整代码,请参见angularjsprocessor。爪哇
  总结
  在本例中,我们分析了一个经典的动态页面爬行过程。事实上,动态页面抓取的最大区别在于它增加了链接发现的难度。让我们比较两种开发模式:
  后端呈现页面
  下载辅助页面=>发现链接=>下载并分析目标HTML
  前端呈现页面
  找到的辅助数据=>构造链接=>下载并分析目标Ajax
  对于不同的站点,这些辅助数据可能在HTML页面中预输出,可能通过Ajax请求,甚至是一个多数据请求的过程,但这种模式基本上是固定的
  但是,这些数据请求的分析仍然比页面分析复杂得多,因此这实际上是动态页面捕获的难点
  本示例的目的是提供一种模式,在分析请求后,可以遵循该模式准备此类爬虫程序,即查找辅助数据=>构造链接=>下载并分析目标Ajax模式
  附言:
  WebMagic0.5.0之后,JSON的支持将添加到链API中。将来,您可以使用:
  page.getJson().jsonPath("$.name").get();
  这种方法可以解析Ajax请求
  它还支持
  page.getJson().removePadding("callback").jsonPath("$.name").get();
  这是解析jsonp请求的方法 查看全部

  ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)
  抓取前端呈现页面
  随着Ajax技术的不断普及和angularjs等单页应用框架的出现,越来越多的页面被JS呈现。对于爬虫来说,这种页面很烦人:仅提取HTML内容通常无法获得有效信息。那么如何处理这种页面呢?一般来说,有两种方法:
  在爬行阶段,浏览器内核内置到爬行器中,页面在爬行之前由JS呈现。这方面的相应工具是selenium、htmlunit或phantom JS。然而,这些工具存在一些效率问题,并且不太稳定。其优点是编写规则与静态页面相同。由于JS呈现页面的数据也是从后端获取的,基本上是通过Ajax获取的,因此分析Ajax请求并找到相应的数据请求也是可行的。此外,与页面样式相比,此界面不太可能更改。缺点是找到这个请求并模拟它是一个相对困难的过程,需要相对较多的分析经验
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法可以节省时间和精力。然而,对于长期和大规模的需求,第二个将更可靠。对于一些站点,甚至是一些JS技术,目前,第一种方法基本上是万能的,第二种方法将非常复杂
  对于第一种方法,webmagic selenium就是这样一种尝试。它定义了一个downloader,在下载页面时使用浏览器内核进行渲染。Selenium的配置很复杂,取决于平台和版本。没有稳定的计划。如果您感兴趣,可以查看我的博客:使用selenium抓取动态加载的页面
  这里主要介绍第二种方法。我希望您会发现解析前端呈现页面并没有那么复杂。这里我们以安格拉斯华人社区为例
  如何判断前端渲染
  判断页面是否以JS呈现的方法相对简单。在浏览器中直接查看源代码(windows中为Ctrl+u,MAC中为Command+Alt+u)。如果找不到有效的信息,基本上肯定会在JS中呈现
  
  
  在本例中,如果在源代码中找不到页面中的标题“优孚计算机网络-前端攻城师”,则可以断定是JS渲染,数据是通过Ajax获取的
  分析请求
  让我们转到最难的部分:查找数据请求。此步骤可以帮助我们的工具,主要是用于在浏览器中查看网络请求的开发人员工具
  以chome为例。让我们打开“开发者工具”(windows上的F12和MAC上的Command+Alt+I),然后再次刷新页面(它也可能是一个下拉页面,简而言之,所有您认为可能触发新数据的操作),然后记住保留场景并逐个分析请求
  这一步需要一点耐心,但并非没有规则可循。首先可以帮助我们的是上面的分类过滤器(所有、文档等)。如果是普通的Ajax,它将显示在XHR标记下,jsonp请求将显示在scripts标记下。这是两种常见的数据类型
  然后你可以根据数据的大小来判断。通常,结果的大小越大,越有可能是返回数据的接口。其余取决于经验。例如,这里的“最新的?P=1&s=20”乍一看是可疑的
  
  对于可疑地址,您可以查看响应主体是什么。我们无法在开发人员工具中清楚地看到它。我们将URL复制到地址栏并再次请求它(如果您安装了chrome推荐的JSON查看器,则可以方便地查看Ajax结果)。看看结果,我们似乎找到了我们想要的
  
  同样,我们转到“发布详细信息”页面,找到了对特定内容的请求:
  程序设计
  如果您回忆一下前面的列表+目标页面示例,您会发现我们这次的需求与之前的需求类似,但是它们被Ajax-Ajax列表、Ajax数据所取代,返回的数据变成JSON。然后,我们仍然可以使用最后一种方法在两页中编写:
  数据表
  在这个列表页面中,我们需要找到有效的信息来帮助我们构建目标Ajax的URL。在这里,我们看到这个ID应该是我们想要的帖子的ID,而帖子详细信息请求由一些固定URL加上这个ID组成。因此,在这一步中,我们手动构造URL并将其添加到要获取的队列中。这里,我们使用选择语言jsonpath来选择数据(webmatic扩展包中提供了jsonpathselector来支持它)
   if (page.getUrl().regex(LIST_URL).match()) {
//这里我们使用JSONPATH这种选择语言来选择数据
List ids = new JsonPathSelector("$.data[*]._id").selectList(page.getRawText());
if (CollectionUtils.isNotEmpty(ids)) {
for (String id : ids) {
page.addTargetRequest("http://angularjs.cn/api/article/"+id);
}
}
}
  目标数据
  使用URL,解析目标数据实际上非常简单。因为JSON数据是完全结构化的,所以我们节省了分析页面和编写XPath的过程。这里我们仍然使用jsonpath来获取标题和内容
   page.putField("title", new JsonPathSelector("$.data.title").select(page.getRawText()));
page.putField("content", new JsonPathSelector("$.data.content").select(page.getRawText()));
  有关此示例的完整代码,请参见angularjsprocessor。爪哇
  总结
  在本例中,我们分析了一个经典的动态页面爬行过程。事实上,动态页面抓取的最大区别在于它增加了链接发现的难度。让我们比较两种开发模式:
  后端呈现页面
  下载辅助页面=>发现链接=>下载并分析目标HTML
  前端呈现页面
  找到的辅助数据=>构造链接=>下载并分析目标Ajax
  对于不同的站点,这些辅助数据可能在HTML页面中预输出,可能通过Ajax请求,甚至是一个多数据请求的过程,但这种模式基本上是固定的
  但是,这些数据请求的分析仍然比页面分析复杂得多,因此这实际上是动态页面捕获的难点
  本示例的目的是提供一种模式,在分析请求后,可以遵循该模式准备此类爬虫程序,即查找辅助数据=>构造链接=>下载并分析目标Ajax模式
  附言:
  WebMagic0.5.0之后,JSON的支持将添加到链API中。将来,您可以使用:
  page.getJson().jsonPath("$.name").get();
  这种方法可以解析Ajax请求
  它还支持
  page.getJson().removePadding("callback").jsonPath("$.name").get();
  这是解析jsonp请求的方法

ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)

网站优化优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2021-09-20 21:26 • 来自相关话题

  ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
  有时,当我们抓取收录请求的页面时,结果可能与在浏览器中看到的结果不同:正常显示的页面数据可以在浏览器中看到,但通过请求获得的结果却不一样。这是因为请求获取原创HTML文档,而浏览器中的页面是在JavaScript处理数据后生成的。这些数据来自各种来源,可以通过Ajax加载,收录在HTML文档中,也可以通过JavaScript和特定算法计算
  对于第一种情况,数据加载是一种异步加载方法。最初,原创页面将不收录某些数据。加载原创页面后,它将从服务器请求一个接口以获取数据,然后数据将被处理并显示到web页面。实际上,它正在发送一个Ajax请求
  根据网络发展的趋势,这种形式的网页越来越多。网页的原创HTML文档不收录任何数据。数据通过Ajax统一加载,然后呈现。这样,在web开发中,前端和后端可以分开,服务器直接呈现页面所带来的压力也可以减少
  因此,如果您遇到这样的页面,您无法通过直接使用请求和其他库获取原创页面来获得有效的数据。此时,您需要分析web页面后台发送到接口的Ajax请求。如果可以使用请求来模拟Ajax请求,就可以成功地捕获它们
  因此,本章的主要目的是了解什么是AJAX以及如何分析和获取AJAX请求
  Ajax完全称为异步JavaScript和XML,是异步JavaScript和XML。它不是一种编程语言,而是一种使用JavaScript与服务器交换数据并更新某些网页而不刷新页面和更改页面链接的技术
  对于传统web页面,如果要更新其内容,必须刷新整个页面,但使用Ajax,可以更新其内容,而无需刷新所有页面。在此过程中,页面实际上在后台与服务器交互。获取数据后,使用JavaScript更改网页,以便更新网页内容
  您可以在w3school上体验几个示例:
  1.实例介绍
  浏览网页时,我们会发现许多网页有更多的选择。例如,以微博为例:/U/283067847。。。切换到微博页面,继续下降。可以发现,在几条微博倒下之后,不会有进一步的下跌。相反,将显示加载的动画。一段时间后,新的微博内容将继续出现在底部。这个过程实际上就是Ajax加载的过程,如图6-1所示
  图6-1页面加载过程
  我们注意到页面没有刷新,这意味着页面的链接没有改变,但是页面中有更多的新内容,也就是说,新微博后来被刷掉了。这是获取新数据并通过Ajax进行渲染的过程
  2.基本原理
  在初步了解Ajax之后,让我们进一步了解它的基本原理。向网页更新发送Ajax请求的过程可以简单地分为以下三个步骤:
  (1)send-request;(2)parse-content;(3)render-web-page)
  让我们详细介绍这些过程
  发送请求
  我们知道JavaScript可以实现页面的各种交互功能,AJAX也不例外,它也是通过JavaScript实现的,实际上执行了以下代码:
  1234567891011121314var xmlhttp;if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();} else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }}xmlhttp.open("POST","/ajax/",true);xmlhttp.send();复制代码
  这是JavaScript对最低级别Ajax的实现。事实上,它是一个新的XMLHttpRequest对象,然后调用onreadystatechange属性来设置监视器,然后调用open()和send()方法来链接(即服务器)。请求被发送。在Python中发送请求后,您可以得到响应结果,但这里请求是用JavaScript发送的。由于设置了侦听,所以当服务器返回响应时,会触发相应的onreadystatechange方法,然后在此方法中解析响应内容
  解析内容
  收到响应后,将触发onreadystatechange属性对应的方法。此时,可以使用xmlhttp的responseText属性获取响应内容。这类似于使用Python中的请求向服务器发送请求并获取响应的过程。然后返回的content可以是HTML或JSON。接下来,您只需要在方法中使用JavaScript进行进一步处理,例如,如果是JSON,则可以对其进行解析和转换
  呈现网页
  JavaScript能够更改网页的内容。解析响应内容后,您可以调用JavaScript根据解析的内容处理网页。例如,通过document.Getelementbyid().innerHTML可以更改元素中的源代码,使网页上显示的内容发生更改。此操作也称为DOM操作,即可以对文档网页文档进行更改、删除等操作
  在上面的示例中,document.Getelementbyid(“mydiv”).InnerHTML=xmlhttp.responsetext将ID为mydiv的节点内的HTML代码更改为服务器返回的内容,这样服务器返回的新数据将显示在mydiv元素内,并且网页的某些内容将被更新
  我们观察到这三个步骤实际上是由JavaScript完成的,JavaScript完成了请求、解析和呈现的整个过程
  回想一下微博的下拉刷新。事实上,JavaScript向服务器发送一个Ajax请求,然后获取新的微博数据,对其进行解析,并将其呈现在网页中
  因此,我们知道真正的数据实际上是通过Ajax请求获得的。如果您想捕获这些数据,您需要知道这些请求是如何发送的,发送到哪里,以及发送了哪些参数。如果我们知道这些,我们可以用Python模拟发送操作以获得结果吗
  在下一节中,我们将学习在哪里可以看到这些背景Ajax操作,它们是如何发送的,以及发送了哪些参数
  本资源来源于崔庆才的个人博客《精米:Python 3网络爬虫开发实用教程》|精米 查看全部

  ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
  有时,当我们抓取收录请求的页面时,结果可能与在浏览器中看到的结果不同:正常显示的页面数据可以在浏览器中看到,但通过请求获得的结果却不一样。这是因为请求获取原创HTML文档,而浏览器中的页面是在JavaScript处理数据后生成的。这些数据来自各种来源,可以通过Ajax加载,收录在HTML文档中,也可以通过JavaScript和特定算法计算
  对于第一种情况,数据加载是一种异步加载方法。最初,原创页面将不收录某些数据。加载原创页面后,它将从服务器请求一个接口以获取数据,然后数据将被处理并显示到web页面。实际上,它正在发送一个Ajax请求
  根据网络发展的趋势,这种形式的网页越来越多。网页的原创HTML文档不收录任何数据。数据通过Ajax统一加载,然后呈现。这样,在web开发中,前端和后端可以分开,服务器直接呈现页面所带来的压力也可以减少
  因此,如果您遇到这样的页面,您无法通过直接使用请求和其他库获取原创页面来获得有效的数据。此时,您需要分析web页面后台发送到接口的Ajax请求。如果可以使用请求来模拟Ajax请求,就可以成功地捕获它们
  因此,本章的主要目的是了解什么是AJAX以及如何分析和获取AJAX请求
  Ajax完全称为异步JavaScript和XML,是异步JavaScript和XML。它不是一种编程语言,而是一种使用JavaScript与服务器交换数据并更新某些网页而不刷新页面和更改页面链接的技术
  对于传统web页面,如果要更新其内容,必须刷新整个页面,但使用Ajax,可以更新其内容,而无需刷新所有页面。在此过程中,页面实际上在后台与服务器交互。获取数据后,使用JavaScript更改网页,以便更新网页内容
  您可以在w3school上体验几个示例:
  1.实例介绍
  浏览网页时,我们会发现许多网页有更多的选择。例如,以微博为例:/U/283067847。。。切换到微博页面,继续下降。可以发现,在几条微博倒下之后,不会有进一步的下跌。相反,将显示加载的动画。一段时间后,新的微博内容将继续出现在底部。这个过程实际上就是Ajax加载的过程,如图6-1所示
  图6-1页面加载过程
  我们注意到页面没有刷新,这意味着页面的链接没有改变,但是页面中有更多的新内容,也就是说,新微博后来被刷掉了。这是获取新数据并通过Ajax进行渲染的过程
  2.基本原理
  在初步了解Ajax之后,让我们进一步了解它的基本原理。向网页更新发送Ajax请求的过程可以简单地分为以下三个步骤:
  (1)send-request;(2)parse-content;(3)render-web-page)
  让我们详细介绍这些过程
  发送请求
  我们知道JavaScript可以实现页面的各种交互功能,AJAX也不例外,它也是通过JavaScript实现的,实际上执行了以下代码:
  1234567891011121314var xmlhttp;if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();} else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }}xmlhttp.open("POST","/ajax/",true);xmlhttp.send();复制代码
  这是JavaScript对最低级别Ajax的实现。事实上,它是一个新的XMLHttpRequest对象,然后调用onreadystatechange属性来设置监视器,然后调用open()和send()方法来链接(即服务器)。请求被发送。在Python中发送请求后,您可以得到响应结果,但这里请求是用JavaScript发送的。由于设置了侦听,所以当服务器返回响应时,会触发相应的onreadystatechange方法,然后在此方法中解析响应内容
  解析内容
  收到响应后,将触发onreadystatechange属性对应的方法。此时,可以使用xmlhttp的responseText属性获取响应内容。这类似于使用Python中的请求向服务器发送请求并获取响应的过程。然后返回的content可以是HTML或JSON。接下来,您只需要在方法中使用JavaScript进行进一步处理,例如,如果是JSON,则可以对其进行解析和转换
  呈现网页
  JavaScript能够更改网页的内容。解析响应内容后,您可以调用JavaScript根据解析的内容处理网页。例如,通过document.Getelementbyid().innerHTML可以更改元素中的源代码,使网页上显示的内容发生更改。此操作也称为DOM操作,即可以对文档网页文档进行更改、删除等操作
  在上面的示例中,document.Getelementbyid(“mydiv”).InnerHTML=xmlhttp.responsetext将ID为mydiv的节点内的HTML代码更改为服务器返回的内容,这样服务器返回的新数据将显示在mydiv元素内,并且网页的某些内容将被更新
  我们观察到这三个步骤实际上是由JavaScript完成的,JavaScript完成了请求、解析和呈现的整个过程
  回想一下微博的下拉刷新。事实上,JavaScript向服务器发送一个Ajax请求,然后获取新的微博数据,对其进行解析,并将其呈现在网页中
  因此,我们知道真正的数据实际上是通过Ajax请求获得的。如果您想捕获这些数据,您需要知道这些请求是如何发送的,发送到哪里,以及发送了哪些参数。如果我们知道这些,我们可以用Python模拟发送操作以获得结果吗
  在下一节中,我们将学习在哪里可以看到这些背景Ajax操作,它们是如何发送的,以及发送了哪些参数
  本资源来源于崔庆才的个人博客《精米:Python 3网络爬虫开发实用教程》|精米

ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-09-20 21:20 • 来自相关话题

  ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))
  当前web页面的相当一部分使用ajax技术。无论在c#中使用webclient还是httprequest,都无法获得正确的结果,因为这些脚本是在服务器发送它们之后执行的
  然而,我们使用ie浏览页面是正常的,所以只有一个解决方案是使用WebBrowser控件
  但是使用WebBrowser,您会发现在downloadcomplete事件中,您根本无法知道页面何时真正加载
  当然,带有框架的单个网页可能会多次触发complete。即使在导航事件中使用counter方法,即++,在downloadcomplete中使用do-,在JS完成后仍然无法获得结果。起初我觉得很奇怪,直到GG来到Ajax文章,明白了原因
  最终的解决方案是使用WebBrowser+定时器来解决抓取页面的问题
  关键仍然是页面状态,我们可以使用它webBrowser1.Statustext,如果返回“complete”,则表示页面已加载
  示例代码如下所示:
  private void timer1_Tick(object sender, EventArgs e)
{

textBox1.Text += webBrowser1.StatusText;
if (webBrowser1.StatusText == "完成")
{

timer1.Enabled = false;
//页面加载完成,做一些其它的事
textBox1.Text += webBrowser1.Document.Body.OuterHtml;
//webBrowser1.DocumentText 注意不要用这个,这个和查看源文件一样的
}
}
private void Form1_Load(object sender, EventArgs e)
{
string Url = "http://cd.mei8.cn/face/work/wi ... 3B%3B
webBrowser1.Navigate(Url);
}
  放置三个控件。将WebBrowser、计时器和文本框计时器设置为可用 查看全部

  ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))
  当前web页面的相当一部分使用ajax技术。无论在c#中使用webclient还是httprequest,都无法获得正确的结果,因为这些脚本是在服务器发送它们之后执行的
  然而,我们使用ie浏览页面是正常的,所以只有一个解决方案是使用WebBrowser控件
  但是使用WebBrowser,您会发现在downloadcomplete事件中,您根本无法知道页面何时真正加载
  当然,带有框架的单个网页可能会多次触发complete。即使在导航事件中使用counter方法,即++,在downloadcomplete中使用do-,在JS完成后仍然无法获得结果。起初我觉得很奇怪,直到GG来到Ajax文章,明白了原因
  最终的解决方案是使用WebBrowser+定时器来解决抓取页面的问题
  关键仍然是页面状态,我们可以使用它webBrowser1.Statustext,如果返回“complete”,则表示页面已加载
  示例代码如下所示:
  private void timer1_Tick(object sender, EventArgs e)
{

textBox1.Text += webBrowser1.StatusText;
if (webBrowser1.StatusText == "完成")
{

timer1.Enabled = false;
//页面加载完成,做一些其它的事
textBox1.Text += webBrowser1.Document.Body.OuterHtml;
//webBrowser1.DocumentText 注意不要用这个,这个和查看源文件一样的
}
}
private void Form1_Load(object sender, EventArgs e)
{
string Url = "http://cd.mei8.cn/face/work/wi ... 3B%3B
webBrowser1.Navigate(Url);
}
  放置三个控件。将WebBrowser、计时器和文本框计时器设置为可用

ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-09-18 02:22 • 来自相关话题

  ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)
  越来越多的网站,开始采用“单页应用”
  网站只有一个网页,它使用Ajax技术根据用户的输入加载不同的内容
  这种方法的优点是良好的用户体验和节省流量。缺点是搜索引擎无法捕获Ajax内容。例如,您有一个网站
  用户可以通过英镑符号结构的URL看到不同的内容
  #一,
  #二,
  #三,
  然而,搜索引擎只抓取并忽略了磅号,所以它不能索引内容
  为了解决这个问题,谷歌提出了“井号+感叹号”的结构
  #!!一,
  当Google找到上述URL时,它将自动获取另一个URL:
  只要你把Ajax内容放在这个网站上,谷歌就会收录. 但问题是,“磅号+感叹号”非常难看和麻烦。推特过去采用这种结构
  改为
  #!/鲁安夫
  结果,用户一再抱怨,仅在半年内就取消了
  那么,有没有办法让搜索引擎在保持更直观的URL的同时抓取Ajax内容呢
  直到两天前我看到了话语权创始人之一的解决方案,我一直认为我做不到这一点
  Distance是一个严重依赖Ajax的论坛程序,但它必须如此Google收录Content。解决方案是放弃井号结构,采用历史API
  所谓的历史API是指在不刷新页面的情况下更改浏览器地址栏中显示的URL(确切地说,更改网页的当前状态)。这里有一个例子。单击上面的按钮开始播放音乐。然后,单击下面的链接,地址栏中的URL将更改,但音乐播放不会中断
  历史API的详细介绍超出了本文的范围文章. 简单地说,它的功能是在浏览器的历史对象中添加一条记录
  window.history.pushState(状态对象、标题、url)
  上面的命令可以在地址栏中显示新的URL。历史对象的pushstate方法接受三个参数。新URL是第三个参数。前两个参数可以为null
  window.history.pushState(null,null,newURL)
  目前,主要浏览器都支持这种方法:chrome(26.0+,Firefox(20.0+,即(10.0+,Safari(5.1+),歌剧(12.1+
  这是罗宾·沃德的方法
  首先,用history API替换磅号结构,使每个磅号成为正常路径的URL,这样搜索引擎将抓取每个网页
  /一,
  /二,
  /三,
  然后,定义一个JavaScript函数来处理Ajax部分,并根据web地址获取内容(假设jQuery)
  功能锚定点击(链接){
  var linkSplit=link.split('/').pop()
  $.get('api/'+linkSplit,函数(数据){
  $('#content').html(数据)
  }))
  }
  然后定义鼠标的单击事件
  $('#container')。在('click','a',函数(e)上{
  window.history.pushState(null,null,$(this.attr('href'))
  anchorClick($(this.attr('href'))
  e、 预防默认值()
  }))
  还考虑用户点击浏览器的“向前/向后”按钮。将触发历史对象的pop状态事件
  window.addEventListener('popstate',函数(e){
  anchorClick(location.pathname)
  }))
  在定义了上述三部分代码之后,您可以在不刷新页面的情况下显示普通路径URL和Ajax内容
  最后,设置服务器端
  因为没有使用磅符号结构,所以每个URL都是不同的请求。因此,服务器需要为所有这些请求返回以下网页,以防止404错误
  如果仔细查看上面的代码,您会发现有一个noscript标记,这是一个秘密
  我们将希望搜索引擎收录使用的所有内容放在noscript标记中。这样,用户仍然可以在不刷新页面的情况下执行Ajax操作,但搜索引擎将收录每个网页的主要内容 查看全部

  ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)
  越来越多的网站,开始采用“单页应用”
  网站只有一个网页,它使用Ajax技术根据用户的输入加载不同的内容
  这种方法的优点是良好的用户体验和节省流量。缺点是搜索引擎无法捕获Ajax内容。例如,您有一个网站
  用户可以通过英镑符号结构的URL看到不同的内容
  #一,
  #二,
  #三,
  然而,搜索引擎只抓取并忽略了磅号,所以它不能索引内容
  为了解决这个问题,谷歌提出了“井号+感叹号”的结构
  #!!一,
  当Google找到上述URL时,它将自动获取另一个URL:
  只要你把Ajax内容放在这个网站上,谷歌就会收录. 但问题是,“磅号+感叹号”非常难看和麻烦。推特过去采用这种结构
  改为
  #!/鲁安夫
  结果,用户一再抱怨,仅在半年内就取消了
  那么,有没有办法让搜索引擎在保持更直观的URL的同时抓取Ajax内容呢
  直到两天前我看到了话语权创始人之一的解决方案,我一直认为我做不到这一点
  Distance是一个严重依赖Ajax的论坛程序,但它必须如此Google收录Content。解决方案是放弃井号结构,采用历史API
  所谓的历史API是指在不刷新页面的情况下更改浏览器地址栏中显示的URL(确切地说,更改网页的当前状态)。这里有一个例子。单击上面的按钮开始播放音乐。然后,单击下面的链接,地址栏中的URL将更改,但音乐播放不会中断
  历史API的详细介绍超出了本文的范围文章. 简单地说,它的功能是在浏览器的历史对象中添加一条记录
  window.history.pushState(状态对象、标题、url)
  上面的命令可以在地址栏中显示新的URL。历史对象的pushstate方法接受三个参数。新URL是第三个参数。前两个参数可以为null
  window.history.pushState(null,null,newURL)
  目前,主要浏览器都支持这种方法:chrome(26.0+,Firefox(20.0+,即(10.0+,Safari(5.1+),歌剧(12.1+
  这是罗宾·沃德的方法
  首先,用history API替换磅号结构,使每个磅号成为正常路径的URL,这样搜索引擎将抓取每个网页
  /一,
  /二,
  /三,
  然后,定义一个JavaScript函数来处理Ajax部分,并根据web地址获取内容(假设jQuery)
  功能锚定点击(链接){
  var linkSplit=link.split('/').pop()
  $.get('api/'+linkSplit,函数(数据){
  $('#content').html(数据)
  }))
  }
  然后定义鼠标的单击事件
  $('#container')。在('click','a',函数(e)上{
  window.history.pushState(null,null,$(this.attr('href'))
  anchorClick($(this.attr('href'))
  e、 预防默认值()
  }))
  还考虑用户点击浏览器的“向前/向后”按钮。将触发历史对象的pop状态事件
  window.addEventListener('popstate',函数(e){
  anchorClick(location.pathname)
  }))
  在定义了上述三部分代码之后,您可以在不刷新页面的情况下显示普通路径URL和Ajax内容
  最后,设置服务器端
  因为没有使用磅符号结构,所以每个URL都是不同的请求。因此,服务器需要为所有这些请求返回以下网页,以防止404错误
  如果仔细查看上面的代码,您会发现有一个noscript标记,这是一个秘密
  我们将希望搜索引擎收录使用的所有内容放在noscript标记中。这样,用户仍然可以在不刷新页面的情况下执行Ajax操作,但搜索引擎将收录每个网页的主要内容

ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-09-17 02:00 • 来自相关话题

  ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)
  ajax抓取网页内容有很多技巧和策略,里面包含了各种应用、各种算法,以及它们之间的互相配合,是一个系统性的研究内容。本文主要介绍如何封装异步http请求等功能。一、分析代码分析http请求大家都很熟悉,通过一个请求格式,就可以判断出这是一个传递数据的请求。但是这里涉及的包含多种方法的request和response格式会相对更复杂。
  因此需要封装一个简单的请求格式来作为封装。(也就是用json封装一个请求格式),详细分析如下。#封装canvasform文件与json结构canvas的form文件非常特殊,它只包含三个文件:attribute标签、object标签、settings配置,用json封装它会包含:attribute和object如何封装?举个栗子:#封装canvasform#封装canvasformxml结构>loadimageelement(attribute,object)value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformjson格式>canvas(attribute,object)size=1600*3000canvas:[{value:"data",canvas:[{attr:canvas.width,attr:canvas.height},{attr:canvas.blend,attr:canvas.gray},{attr:canvas.grayscale,attr:canvas.blend},{attr:canvas.width,attr:canvas.height},{attr:canvas.random,attr:canvas.random}]}element封装格式是放在canvas的object标签里,我们给它分配一个标签名为form,用于添加object标签,实现一个分析页面内容的封装请求。
  二、json封装相对封装,json封装更容易理解,但是有时候为了兼容性,使用json封装会会更加方便。json封装的大体思路是:预处理所有字符,然后生成一个纯字符串,最后通过一个domnode去遍历字符串来封装,最后返回一个字符串。#封装canvasform#封装canvasformjson结构canvas(attribute,object)size=1600*3000,value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformxml结构>canvas(attribute,object)objectxmltype:object(xmltype)path:file=content=source=text:jsondecode:doctype=object"""{xml:text}""">生成一个纯字符串,封装同上实现.#封装。 查看全部

  ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)
  ajax抓取网页内容有很多技巧和策略,里面包含了各种应用、各种算法,以及它们之间的互相配合,是一个系统性的研究内容。本文主要介绍如何封装异步http请求等功能。一、分析代码分析http请求大家都很熟悉,通过一个请求格式,就可以判断出这是一个传递数据的请求。但是这里涉及的包含多种方法的request和response格式会相对更复杂。
  因此需要封装一个简单的请求格式来作为封装。(也就是用json封装一个请求格式),详细分析如下。#封装canvasform文件与json结构canvas的form文件非常特殊,它只包含三个文件:attribute标签、object标签、settings配置,用json封装它会包含:attribute和object如何封装?举个栗子:#封装canvasform#封装canvasformxml结构>loadimageelement(attribute,object)value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformjson格式>canvas(attribute,object)size=1600*3000canvas:[{value:"data",canvas:[{attr:canvas.width,attr:canvas.height},{attr:canvas.blend,attr:canvas.gray},{attr:canvas.grayscale,attr:canvas.blend},{attr:canvas.width,attr:canvas.height},{attr:canvas.random,attr:canvas.random}]}element封装格式是放在canvas的object标签里,我们给它分配一个标签名为form,用于添加object标签,实现一个分析页面内容的封装请求。
  二、json封装相对封装,json封装更容易理解,但是有时候为了兼容性,使用json封装会会更加方便。json封装的大体思路是:预处理所有字符,然后生成一个纯字符串,最后通过一个domnode去遍历字符串来封装,最后返回一个字符串。#封装canvasform#封装canvasformjson结构canvas(attribute,object)size=1600*3000,value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformxml结构>canvas(attribute,object)objectxmltype:object(xmltype)path:file=content=source=text:jsondecode:doctype=object"""{xml:text}""">生成一个纯字符串,封装同上实现.#封装。

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2021-09-16 14:11 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  一,。导言
  在PythonWebCrawler内容提取器文章中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器工艺路线过程中的程序设计实验。这是第二部分。在第一部分中,实验使用XSLT一次性提取静态网页内容并将其转换为XML格式。这就留下了一个问题:如何提取JavaScript管理的动态内容?然后本文回答了这个问题
  二,。用于提取动态内容的技术组件
  在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax动态内容在源代码中找不到,因此有必要找到适当的库来加载异步或动态加载的内容,并将其交给项目的提取器进行提取
  Python可以使用selenium执行JavaScript,selenium可以让浏览器自动加载页面并获取所需数据。Selenium没有浏览器。它可以使用第三方浏览器(如Firefox和chrome)或无头浏览器(如phantom JS)在后台执行
  三,。源代码和实验过程
  如果我们想抓取京东手机页面的手机名称和价格(在网络源代码中找不到价格),如下图所示:
  
  步骤1:使用jisou customer search的可视化注释功能,可以以非常快的速度自动生成已调试的捕获规则。事实上,它是一个标准的XSLT程序。如下图所示,将生成的XSLT程序复制到以下程序。注:本文仅记录实验过程。在实际系统中,XSLT程序将以多种方式注入到内容提取器中
  
  步骤2:执行以下代码(在Windows 10中,python3.2.测试通过了。有关源代码的下载地址,请参考文章末尾的GitHub。请注意XSLT是一个相对较长的字符串。如果删除此字符串,则只有几行代码,这足以显示Python的强大功能
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  步骤3:您可以看到网页中的手机名称和价格已被正确捕获
  
  4.下一读
  到目前为止,通过两个文章演示如何捕获静态和动态网页内容,我们使用XSLT一次性从网页中提取所需内容。事实上,XSLT是一种相对复杂的编程语言。如果手动编写XSLT,也可以将其编写为离散XPath。如果XSLT不是手动编写的,但是由程序自动生成是有意义的。程序员不应该再花时间编写和调整捕获规则,这是一项耗时费力的工作。下一篇文章“1分钟快速生成用于网页内容提取的XSLT”将介绍如何生成XSLT
  5.jiscokegooseker开源代码下载源码
  1.GooSeeker开源Python web爬虫GitHub源代码
  6.文件修改历史记录
  2016-05-26:V2.0,补充文字说明
  2016-05-29:V2.1.添加第5章:下载源代码,更改GitHub source网站 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  一,。导言
  在PythonWebCrawler内容提取器文章中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器工艺路线过程中的程序设计实验。这是第二部分。在第一部分中,实验使用XSLT一次性提取静态网页内容并将其转换为XML格式。这就留下了一个问题:如何提取JavaScript管理的动态内容?然后本文回答了这个问题
  二,。用于提取动态内容的技术组件
  在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax动态内容在源代码中找不到,因此有必要找到适当的库来加载异步或动态加载的内容,并将其交给项目的提取器进行提取
  Python可以使用selenium执行JavaScript,selenium可以让浏览器自动加载页面并获取所需数据。Selenium没有浏览器。它可以使用第三方浏览器(如Firefox和chrome)或无头浏览器(如phantom JS)在后台执行
  三,。源代码和实验过程
  如果我们想抓取京东手机页面的手机名称和价格(在网络源代码中找不到价格),如下图所示:
  
  步骤1:使用jisou customer search的可视化注释功能,可以以非常快的速度自动生成已调试的捕获规则。事实上,它是一个标准的XSLT程序。如下图所示,将生成的XSLT程序复制到以下程序。注:本文仅记录实验过程。在实际系统中,XSLT程序将以多种方式注入到内容提取器中
  
  步骤2:执行以下代码(在Windows 10中,python3.2.测试通过了。有关源代码的下载地址,请参考文章末尾的GitHub。请注意XSLT是一个相对较长的字符串。如果删除此字符串,则只有几行代码,这足以显示Python的强大功能
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  步骤3:您可以看到网页中的手机名称和价格已被正确捕获
  
  4.下一读
  到目前为止,通过两个文章演示如何捕获静态和动态网页内容,我们使用XSLT一次性从网页中提取所需内容。事实上,XSLT是一种相对复杂的编程语言。如果手动编写XSLT,也可以将其编写为离散XPath。如果XSLT不是手动编写的,但是由程序自动生成是有意义的。程序员不应该再花时间编写和调整捕获规则,这是一项耗时费力的工作。下一篇文章“1分钟快速生成用于网页内容提取的XSLT”将介绍如何生成XSLT
  5.jiscokegooseker开源代码下载源码
  1.GooSeeker开源Python web爬虫GitHub源代码
  6.文件修改历史记录
  2016-05-26:V2.0,补充文字说明
  2016-05-29:V2.1.添加第5章:下载源代码,更改GitHub source网站

ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)

网站优化优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2021-09-16 04:17 • 来自相关话题

  ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)
  ---恢复内容启动---
  以下是如何获取以Ajax形式加载的网页数据的记录:
  目标:获取“%E5%89%A7%E6%83%85&type=11&interval\u id=100:90&action=“”下的网页数据
  步骤1:网页数据分析——特性:当列表栏滚动到页面底部时,数据自动加载,页面的URL不变
  步骤2:使用Fiddler捕捉数据包,如下图所示:
  图1:请求数据
  
  图2:表格
  
  数据规则是通过捕获数据包得到的:图2的from表单中对应的start数据和图1的URL中对应的start数据随着每次加载而增加,其他数据不变,根据这个规律,我们可以构造相应的请求来获取数据
  注意,数据形式是JSON
  代码如下:
  1).urllib形式
  import urllib2
import urllib
#此处的url为上述抓包获取的url去掉start以及limit,start以及limit数据后边以form表单的形式传入
url = ' https://movie.douban.com/j/cha ... 39%3B
#请求投信息,伪造成浏览器,方式被反爬虫策略拦截
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
#构建form表单
formdata = {
"start":"20",
"limit":"20"
}
#urlencode()urllib中的函数,作用:将key:value形式的键值对转换为"key=value"形式的字符串
data = urllib.urlencode(formdata)
#构建request实例对象
request = urllib2.Request(url,data=data,headers=headers)
#发送请求并返回响应信息
response = urllib2.urlopen(request)
#注意此处的数据形式并不是html文档,而是json数据
json = response.read()
print html
  2).request获取库的请求代码
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
data = {
"start":"20",
"limit":"20",
}
response = requests.get(url,params = data,headers = headers)
print response.text
  3).request申请图书馆
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
formdata = {
"start":"20",
"limit":"20"
}
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
response = requests.post(url,data=formdata,headers=headers)
print response.text
  ---恢复期结束--- 查看全部

  ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)
  ---恢复内容启动---
  以下是如何获取以Ajax形式加载的网页数据的记录:
  目标:获取“%E5%89%A7%E6%83%85&type=11&interval\u id=100:90&action=“”下的网页数据
  步骤1:网页数据分析——特性:当列表栏滚动到页面底部时,数据自动加载,页面的URL不变
  步骤2:使用Fiddler捕捉数据包,如下图所示:
  图1:请求数据
  
  图2:表格
  
  数据规则是通过捕获数据包得到的:图2的from表单中对应的start数据和图1的URL中对应的start数据随着每次加载而增加,其他数据不变,根据这个规律,我们可以构造相应的请求来获取数据
  注意,数据形式是JSON
  代码如下:
  1).urllib形式
  import urllib2
import urllib
#此处的url为上述抓包获取的url去掉start以及limit,start以及limit数据后边以form表单的形式传入
url = ' https://movie.douban.com/j/cha ... 39%3B
#请求投信息,伪造成浏览器,方式被反爬虫策略拦截
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
#构建form表单
formdata = {
"start":"20",
"limit":"20"
}
#urlencode()urllib中的函数,作用:将key:value形式的键值对转换为"key=value"形式的字符串
data = urllib.urlencode(formdata)
#构建request实例对象
request = urllib2.Request(url,data=data,headers=headers)
#发送请求并返回响应信息
response = urllib2.urlopen(request)
#注意此处的数据形式并不是html文档,而是json数据
json = response.read()
print html
  2).request获取库的请求代码
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
data = {
"start":"20",
"limit":"20",
}
response = requests.get(url,params = data,headers = headers)
print response.text
  3).request申请图书馆
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
formdata = {
"start":"20",
"limit":"20"
}
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
response = requests.post(url,data=formdata,headers=headers)
print response.text
  ---恢复期结束---

ajax抓取网页内容( 2017年12月13日具有很好的参考价值,希望对大家有所帮助)

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2021-09-16 04:11 • 来自相关话题

  ajax抓取网页内容(
2017年12月13日具有很好的参考价值,希望对大家有所帮助)
  Ajax跨域收购网站json数据实例
  更新时间:2017年12月13日09:21:07作者:第9云
  让我们分享一个Ajax跨域收购网站json实例数据具有很好的参考价值,希望对您有所帮助。让我们跟着小编看一看
  因为你公司的项目需要调用视频地址
  1:当它是链接时:直接在播放器数据库中查找地址
  2:当它是外部链接时:直接使用窗口。地点。Href('在数据库中搜索的地址')
  3:连接H5时:使用播放
  4:对于其他网站链接,请转到第三方网站读取JSON信息,然后将JSON数据作为URL放在播放器中
  当它为4时,当我使用JSON时会出现格式错误
  当使用jsonp解决跨域问题时,无法接收返回格式
  所以我用
  
public static String analysisUrl(String url){
HttpURLConnection httpConnection = null;
String output = "";
try {
URL targetUrl = new URL(url);
httpConnection = (HttpURLConnection) targetUrl.openConnection();
httpConnection.setDoOutput(true);
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Content-Type",
"application/json");
InputStreamReader isr = new InputStreamReader(httpConnection
.getInputStream(),"utf-8");
BufferedReader responseBuffer = new BufferedReader(isr);
output = responseBuffer.readLine();

} catch (Exception e) {

} finally {
httpConnection.disconnect();
}
return output;
}
  传递一个URL。此方法将读取网站并返回它
  所以我使用ajax在前台将URL传递给这个方法,返回类型是JSON
  使用数据。结果。获取URL中JSON数据的数据名称
  上述Ajax跨域收购网站json数据示例是小编共享的所有内容。我希望它能给你一个参考和支持脚本的房子 查看全部

  ajax抓取网页内容(
2017年12月13日具有很好的参考价值,希望对大家有所帮助)
  Ajax跨域收购网站json数据实例
  更新时间:2017年12月13日09:21:07作者:第9云
  让我们分享一个Ajax跨域收购网站json实例数据具有很好的参考价值,希望对您有所帮助。让我们跟着小编看一看
  因为你公司的项目需要调用视频地址
  1:当它是链接时:直接在播放器数据库中查找地址
  2:当它是外部链接时:直接使用窗口。地点。Href('在数据库中搜索的地址')
  3:连接H5时:使用播放
  4:对于其他网站链接,请转到第三方网站读取JSON信息,然后将JSON数据作为URL放在播放器中
  当它为4时,当我使用JSON时会出现格式错误
  当使用jsonp解决跨域问题时,无法接收返回格式
  所以我用
  
public static String analysisUrl(String url){
HttpURLConnection httpConnection = null;
String output = "";
try {
URL targetUrl = new URL(url);
httpConnection = (HttpURLConnection) targetUrl.openConnection();
httpConnection.setDoOutput(true);
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Content-Type",
"application/json");
InputStreamReader isr = new InputStreamReader(httpConnection
.getInputStream(),"utf-8");
BufferedReader responseBuffer = new BufferedReader(isr);
output = responseBuffer.readLine();

} catch (Exception e) {

} finally {
httpConnection.disconnect();
}
return output;
}
  传递一个URL。此方法将读取网站并返回它
  所以我使用ajax在前台将URL传递给这个方法,返回类型是JSON
  使用数据。结果。获取URL中JSON数据的数据名称
  上述Ajax跨域收购网站json数据示例是小编共享的所有内容。我希望它能给你一个参考和支持脚本的房子

ajax抓取网页内容( 2019年X月中华人民共和国县以上反爬机制及处理方式)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-09-16 04:09 • 来自相关话题

  ajax抓取网页内容(
2019年X月中华人民共和国县以上反爬机制及处理方式)
  Python抓取Ajax动态加载网页分析
  更新时间:2019年9月5日08:47:06作者:凌妮珊
  本文文章主要介绍Python抓取Ajax动态加载网页的过程。通过实例代码对其进行了详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考
  常见防爬机理及处理方法
  1、Headers反爬虫:cookie、referer、用户代理
  解决方案:通过F12获取标题并将其传递给请求。Get()方法
  2、IP限制:网站根据IP地址访问频率进行反向爬网,短时间访问IP
  解决方案:
  1、构建自己的IP代理池,每次访问时随机选择代理,并经常更新代理池
  2、购买开放代理或专用代理IP
  3、降低爬行速度
  3、User-代理限制:类似于IP限制
  解决方案:构建自己的用户代理池,并在每次访问时随机选择它
  5、authenticate查询参数或表单数据(salt、sign)
  解决方案:找到JS文件,分析JS处理方法,并使用Python以相同的方式进行处理
  6、处理响应内容
  解决方案:打印和查看响应内容,并使用XPath或正则表达式进行处理
  Python中标题和表单数据的常规处理
  1、pycharm输入方式:Ctrl+R,选择正则表达式
  2、处理标题和表单数据
  (**):(**)
  “1”:“1”:“2”
  3、单击“全部替换”
  民政部网站数据采集
  目的:获取最新的中华人民共和国县级以上行政区划代码
  URL:-民政数据-行政区划代码
  实施步骤
  1、从民政数据中提取最新的行政区划代码链接网站
  最新的一个在上面。命名格式:2019年x月中华人民共和国县级以上行政区划代码
  
import requests
from lxml import etree
import re

url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
html = requests.get(url, headers=headers).text
parse_html = etree.HTML(html)
article_list = parse_html.xpath('//a[@class="artitlelist"]')

for article in article_list:
title = article.xpath('./@title')[0]
# 正则匹配title中包含这个字符串的链接
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
two_link = 'http://www.mca.gov.cn' + article.xpath('./@href')[0]
print(two_link)
break
  2、从第二页链接中提取真实链接(反爬网响应,在网页内容中嵌入JS,并指向新的网页链接)
  向辅助页面链接发送请求以获取响应内容,并查看嵌入的JS代码
  真实二级页面链接的常规提取
  
# 爬取二级“假”链接
two_html = requests.get(two_link, headers=headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
new_two_link = re.findall(r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" ', two_html, re.S)[0]
  3、query是否已在数据库表中对此链接进行爬网,以建立增量爬网器
  在数据库中构建版本表以存储爬网链接
  每次执行程序时,检查版本表中的记录,查看它们是否已被爬网
  
cursor.execute('select * from version')
result = self.cursor.fetchall()
if result:
if result[-1][0] == two_link:
print('已是最新')
else:
# 有更新,开始抓取
# 将链接再重新插入version表记录
  4、代码实现
  
import requests
from lxml import etree
import re
import pymysql
class GovementSpider(object):
def __init__(self):
self.url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
self.headers = {'User-Agent': 'Mozilla/5.0'}
# 创建2个对象
self.db = pymysql.connect('127.0.0.1', 'root', '123456', 'govdb', charset='utf8')
self.cursor = self.db.cursor()
# 获取假链接
def get_false_link(self):
html = requests.get(url=self.url, headers=self.headers).text
# 此处隐藏了真实的二级页面的url链接,真实的在假的响应网页中,通过js脚本生成,
# 假的链接在网页中可以访问,但是爬取到的内容却不是我们想要的
parse_html = etree.HTML(html)
a_list = parse_html.xpath('//a[@class="artitlelist"]')
for a in a_list:
# get()方法:获取某个属性的值
title = a.get('title')
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
false_link = 'http://www.mca.gov.cn' + a.get('href')
print("二级“假”链接的网址为", false_link)
break
# 提取真链接
self.incr_spider(false_link)
# 增量爬取函数
def incr_spider(self, false_link):
self.cursor.execute('select url from version where url=%s', [false_link])
# fetchall: (('http://xxxx.html',),)
result = self.cursor.fetchall()
# not result:代表数据库version表中无数据
if not result:
self.get_true_link(false_link)
# 可选操作: 数据库version表中只保留最新1条数据
self.cursor.execute("delete from version")
# 把爬取后的url插入到version表中
self.cursor.execute('insert into version values(%s)', [false_link])
self.db.commit()
else:
print('数据已是最新,无须爬取')
# 获取真链接
def get_true_link(self, false_link):
# 先获取假链接的响应,然后根据响应获取真链接
html = requests.get(url=false_link, headers=self.headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
re_bds = r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" '
pattern = re.compile(re_bds, re.S)
true_link = pattern.findall(html)[0]
self.save_data(true_link) # 提取真链接的数据
# 用xpath直接提取数据
def save_data(self, true_link):
html = requests.get(url=true_link, headers=self.headers).text
# 基准xpath,提取每个信息的节点列表对象
parse_html = etree.HTML(html)
tr_list = parse_html.xpath('//tr[@height="19"]')
for tr in tr_list:
code = tr.xpath('./td[2]/text()')[0].strip() # 行政区划代码
name = tr.xpath('./td[3]/text()')[0].strip() # 单位名称
print(name, code)
# 主函数
def main(self):
self.get_false_link()
if __name__ == '__main__':
spider = GovementSpider()
spider.main()
  动态加载数据抓取Ajax
  特征
  右键单击->查看网页。源代码中没有特定的数据
  滚动鼠标滚轮或其他操作时加载
  ץȡ
  F12打开控制台,选择XHR异步加载数据包,找到页面操作并抓取网络数据包
  通过XHR-->头-->常规-->请求URL获取JSON文件URL地址
  通过XHR-->标题-->查询字符串参数
  豆瓣电影数据采集案例
  目标
  地址:豆瓣电影-排行榜-剧情
  类型名称=%E5%89%A7%E6%83%85&type=11&interval\id=100:90&action=
  目标:提升电影名称和分数
  F12数据包捕获(XHR)
  1、RequestURL(基本URL地址):
  2、Query字符串参数(查询参数)
  
# 查询参数如下:
type: 13 # 电影类型
interval_id: 100:90
action: '[{},{},{}]'
start: 0 # 每次加载电影的起始索引值
limit: 20 # 每次加载的电影数量
  JSON文件位于以下地址:
  参考URL地址+查询参数
  ''+'类型=11,间隔=100%3A90,动作=20,开始=20,限制=20'
  代码实现
  
import requests
import time
from fake_useragent import UserAgent
class DoubanSpider(object):
def __init__(self):
self.base_url = 'https://movie.douban.com/j/chart/top_list?'
self.i = 0
def get_html(self, params):
headers = {'User-Agent': UserAgent().random}
res = requests.get(url=self.base_url, params=params, headers=headers)
res.encoding = 'utf-8'
html = res.json() # 将json格式的字符串转为python数据类型
self.parse_html(html) # 直接调用解析函数
def parse_html(self, html):
# html: [{电影1信息},{电影2信息},{}]
item = {}
for one in html:
item['name'] = one['title'] # 电影名
item['score'] = one['score'] # 评分
item['time'] = one['release_date'] # 打印测试
# 打印显示
print(item)
self.i += 1
# 获取电影总数
def get_total(self, typ):
# 异步动态加载的数据 都可以在XHR数据抓包
url = 'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90'.format(typ)
ua = UserAgent()
html = requests.get(url=url, headers={'User-Agent': ua.random}).json()
total = html['total']
return total
def main(self):
typ = input('请输入电影类型(剧情|喜剧|动作):')
typ_dict = {'剧情': '11', '喜剧': '24', '动作': '5'}
typ = typ_dict[typ]
total = self.get_total(typ) # 获取该类型电影总数量
for page in range(0, int(total), 20):
params = {
'type': typ,
'interval_id': '100:90',
'action': '',
'start': str(page),
'limit': '20'}
self.get_html(params)
time.sleep(1)
print('爬取的电影的数量:', self.i)
if __name__ == '__main__':
spider = DoubanSpider()
spider.main()
  腾讯招聘数据采集(Ajax)
  确定URL地址和目的地
  网址:百度搜索腾讯招聘-查看职位
  目标:职位名称、工作职责和工作要求
  需求与分析
  通过查看web源代码,我们知道所需的数据是Ajax动态加载
  通过F12抓取网络数据包进行分析
  第一级页面捕获数据:职位名称
  第二页捕获的数据:工作职责和工作要求
  第一级页面JSON地址(页面索引正在更改,未检查时间戳)
  {}&pageSize=10&language=zh-cn&area=cn
  辅助页面地址(postid正在更改,可以在主页面中获取)
  {}&language=zh cn
  Useragents.py文件
  
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)',
]
  
import time
import json
import random
import requests
from useragents import ua_list
class TencentSpider(object):
def __init__(self):
self.one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'
self.two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn'
self.f = open('tencent.json', 'a') # 打开文件
self.item_list = [] # 存放抓取的item字典数据
# 获取响应内容函数
def get_page(self, url):
headers = {'User-Agent': random.choice(ua_list)}
html = requests.get(url=url, headers=headers).text
html = json.loads(html) # json格式字符串转为Python数据类型
return html
# 主线函数: 获取所有数据
def parse_page(self, one_url):
html = self.get_page(one_url)
item = {}
for job in html['Data']['Posts']:
item['name'] = job['RecruitPostName'] # 名称
post_id = job['PostId'] # postId,拿postid为了拼接二级页面地址
# 拼接二级地址,获取职责和要求
two_url = self.two_url.format(post_id)
item['duty'], item['require'] = self.parse_two_page(two_url)
print(item)
self.item_list.append(item) # 添加到大列表中
# 解析二级页面函数
def parse_two_page(self, two_url):
html = self.get_page(two_url)
duty = html['Data']['Responsibility'] # 工作责任
duty = duty.replace('\r\n', '').replace('\n', '') # 去掉换行
require = html['Data']['Requirement'] # 工作要求
require = require.replace('\r\n', '').replace('\n', '') # 去掉换行
return duty, require
# 获取总页数
def get_numbers(self):
url = self.one_url.format(1)
html = self.get_page(url)
numbers = int(html['Data']['Count']) // 10 + 1 # 每页有10个推荐
return numbers
def main(self):
number = self.get_numbers()
for page in range(1, 3):
one_url = self.one_url.format(page)
self.parse_page(one_url)
# 保存到本地json文件:json.dump
json.dump(self.item_list, self.f, ensure_ascii=False)
self.f.close()
if __name__ == '__main__':
start = time.time()
spider = TencentSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end - start))
  以上是本文的全部内容。我希望这将有助于你的学习,我希望你能支持脚本的房子 查看全部

  ajax抓取网页内容(
2019年X月中华人民共和国县以上反爬机制及处理方式)
  Python抓取Ajax动态加载网页分析
  更新时间:2019年9月5日08:47:06作者:凌妮珊
  本文文章主要介绍Python抓取Ajax动态加载网页的过程。通过实例代码对其进行了详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考
  常见防爬机理及处理方法
  1、Headers反爬虫:cookie、referer、用户代理
  解决方案:通过F12获取标题并将其传递给请求。Get()方法
  2、IP限制:网站根据IP地址访问频率进行反向爬网,短时间访问IP
  解决方案:
  1、构建自己的IP代理池,每次访问时随机选择代理,并经常更新代理池
  2、购买开放代理或专用代理IP
  3、降低爬行速度
  3、User-代理限制:类似于IP限制
  解决方案:构建自己的用户代理池,并在每次访问时随机选择它
  5、authenticate查询参数或表单数据(salt、sign)
  解决方案:找到JS文件,分析JS处理方法,并使用Python以相同的方式进行处理
  6、处理响应内容
  解决方案:打印和查看响应内容,并使用XPath或正则表达式进行处理
  Python中标题和表单数据的常规处理
  1、pycharm输入方式:Ctrl+R,选择正则表达式
  2、处理标题和表单数据
  (**):(**)
  “1”:“1”:“2”
  3、单击“全部替换”
  民政部网站数据采集
  目的:获取最新的中华人民共和国县级以上行政区划代码
  URL:-民政数据-行政区划代码
  实施步骤
  1、从民政数据中提取最新的行政区划代码链接网站
  最新的一个在上面。命名格式:2019年x月中华人民共和国县级以上行政区划代码
  
import requests
from lxml import etree
import re

url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
html = requests.get(url, headers=headers).text
parse_html = etree.HTML(html)
article_list = parse_html.xpath('//a[@class="artitlelist"]')

for article in article_list:
title = article.xpath('./@title')[0]
# 正则匹配title中包含这个字符串的链接
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
two_link = 'http://www.mca.gov.cn' + article.xpath('./@href')[0]
print(two_link)
break
  2、从第二页链接中提取真实链接(反爬网响应,在网页内容中嵌入JS,并指向新的网页链接)
  向辅助页面链接发送请求以获取响应内容,并查看嵌入的JS代码
  真实二级页面链接的常规提取
  
# 爬取二级“假”链接
two_html = requests.get(two_link, headers=headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
new_two_link = re.findall(r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" ', two_html, re.S)[0]
  3、query是否已在数据库表中对此链接进行爬网,以建立增量爬网器
  在数据库中构建版本表以存储爬网链接
  每次执行程序时,检查版本表中的记录,查看它们是否已被爬网
  
cursor.execute('select * from version')
result = self.cursor.fetchall()
if result:
if result[-1][0] == two_link:
print('已是最新')
else:
# 有更新,开始抓取
# 将链接再重新插入version表记录
  4、代码实现
  
import requests
from lxml import etree
import re
import pymysql
class GovementSpider(object):
def __init__(self):
self.url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
self.headers = {'User-Agent': 'Mozilla/5.0'}
# 创建2个对象
self.db = pymysql.connect('127.0.0.1', 'root', '123456', 'govdb', charset='utf8')
self.cursor = self.db.cursor()
# 获取假链接
def get_false_link(self):
html = requests.get(url=self.url, headers=self.headers).text
# 此处隐藏了真实的二级页面的url链接,真实的在假的响应网页中,通过js脚本生成,
# 假的链接在网页中可以访问,但是爬取到的内容却不是我们想要的
parse_html = etree.HTML(html)
a_list = parse_html.xpath('//a[@class="artitlelist"]')
for a in a_list:
# get()方法:获取某个属性的值
title = a.get('title')
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
false_link = 'http://www.mca.gov.cn' + a.get('href')
print("二级“假”链接的网址为", false_link)
break
# 提取真链接
self.incr_spider(false_link)
# 增量爬取函数
def incr_spider(self, false_link):
self.cursor.execute('select url from version where url=%s', [false_link])
# fetchall: (('http://xxxx.html',),)
result = self.cursor.fetchall()
# not result:代表数据库version表中无数据
if not result:
self.get_true_link(false_link)
# 可选操作: 数据库version表中只保留最新1条数据
self.cursor.execute("delete from version")
# 把爬取后的url插入到version表中
self.cursor.execute('insert into version values(%s)', [false_link])
self.db.commit()
else:
print('数据已是最新,无须爬取')
# 获取真链接
def get_true_link(self, false_link):
# 先获取假链接的响应,然后根据响应获取真链接
html = requests.get(url=false_link, headers=self.headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
re_bds = r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" '
pattern = re.compile(re_bds, re.S)
true_link = pattern.findall(html)[0]
self.save_data(true_link) # 提取真链接的数据
# 用xpath直接提取数据
def save_data(self, true_link):
html = requests.get(url=true_link, headers=self.headers).text
# 基准xpath,提取每个信息的节点列表对象
parse_html = etree.HTML(html)
tr_list = parse_html.xpath('//tr[@height="19"]')
for tr in tr_list:
code = tr.xpath('./td[2]/text()')[0].strip() # 行政区划代码
name = tr.xpath('./td[3]/text()')[0].strip() # 单位名称
print(name, code)
# 主函数
def main(self):
self.get_false_link()
if __name__ == '__main__':
spider = GovementSpider()
spider.main()
  动态加载数据抓取Ajax
  特征
  右键单击->查看网页。源代码中没有特定的数据
  滚动鼠标滚轮或其他操作时加载
  ץȡ
  F12打开控制台,选择XHR异步加载数据包,找到页面操作并抓取网络数据包
  通过XHR-->头-->常规-->请求URL获取JSON文件URL地址
  通过XHR-->标题-->查询字符串参数
  豆瓣电影数据采集案例
  目标
  地址:豆瓣电影-排行榜-剧情
  类型名称=%E5%89%A7%E6%83%85&type=11&interval\id=100:90&action=
  目标:提升电影名称和分数
  F12数据包捕获(XHR)
  1、RequestURL(基本URL地址):
  2、Query字符串参数(查询参数)
  
# 查询参数如下:
type: 13 # 电影类型
interval_id: 100:90
action: '[{},{},{}]'
start: 0 # 每次加载电影的起始索引值
limit: 20 # 每次加载的电影数量
  JSON文件位于以下地址:
  参考URL地址+查询参数
  ''+'类型=11,间隔=100%3A90,动作=20,开始=20,限制=20'
  代码实现
  
import requests
import time
from fake_useragent import UserAgent
class DoubanSpider(object):
def __init__(self):
self.base_url = 'https://movie.douban.com/j/chart/top_list?'
self.i = 0
def get_html(self, params):
headers = {'User-Agent': UserAgent().random}
res = requests.get(url=self.base_url, params=params, headers=headers)
res.encoding = 'utf-8'
html = res.json() # 将json格式的字符串转为python数据类型
self.parse_html(html) # 直接调用解析函数
def parse_html(self, html):
# html: [{电影1信息},{电影2信息},{}]
item = {}
for one in html:
item['name'] = one['title'] # 电影名
item['score'] = one['score'] # 评分
item['time'] = one['release_date'] # 打印测试
# 打印显示
print(item)
self.i += 1
# 获取电影总数
def get_total(self, typ):
# 异步动态加载的数据 都可以在XHR数据抓包
url = 'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90'.format(typ)
ua = UserAgent()
html = requests.get(url=url, headers={'User-Agent': ua.random}).json()
total = html['total']
return total
def main(self):
typ = input('请输入电影类型(剧情|喜剧|动作):')
typ_dict = {'剧情': '11', '喜剧': '24', '动作': '5'}
typ = typ_dict[typ]
total = self.get_total(typ) # 获取该类型电影总数量
for page in range(0, int(total), 20):
params = {
'type': typ,
'interval_id': '100:90',
'action': '',
'start': str(page),
'limit': '20'}
self.get_html(params)
time.sleep(1)
print('爬取的电影的数量:', self.i)
if __name__ == '__main__':
spider = DoubanSpider()
spider.main()
  腾讯招聘数据采集(Ajax)
  确定URL地址和目的地
  网址:百度搜索腾讯招聘-查看职位
  目标:职位名称、工作职责和工作要求
  需求与分析
  通过查看web源代码,我们知道所需的数据是Ajax动态加载
  通过F12抓取网络数据包进行分析
  第一级页面捕获数据:职位名称
  第二页捕获的数据:工作职责和工作要求
  第一级页面JSON地址(页面索引正在更改,未检查时间戳)
  {}&pageSize=10&language=zh-cn&area=cn
  辅助页面地址(postid正在更改,可以在主页面中获取)
  {}&language=zh cn
  Useragents.py文件
  
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)',
]
  
import time
import json
import random
import requests
from useragents import ua_list
class TencentSpider(object):
def __init__(self):
self.one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'
self.two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn'
self.f = open('tencent.json', 'a') # 打开文件
self.item_list = [] # 存放抓取的item字典数据
# 获取响应内容函数
def get_page(self, url):
headers = {'User-Agent': random.choice(ua_list)}
html = requests.get(url=url, headers=headers).text
html = json.loads(html) # json格式字符串转为Python数据类型
return html
# 主线函数: 获取所有数据
def parse_page(self, one_url):
html = self.get_page(one_url)
item = {}
for job in html['Data']['Posts']:
item['name'] = job['RecruitPostName'] # 名称
post_id = job['PostId'] # postId,拿postid为了拼接二级页面地址
# 拼接二级地址,获取职责和要求
two_url = self.two_url.format(post_id)
item['duty'], item['require'] = self.parse_two_page(two_url)
print(item)
self.item_list.append(item) # 添加到大列表中
# 解析二级页面函数
def parse_two_page(self, two_url):
html = self.get_page(two_url)
duty = html['Data']['Responsibility'] # 工作责任
duty = duty.replace('\r\n', '').replace('\n', '') # 去掉换行
require = html['Data']['Requirement'] # 工作要求
require = require.replace('\r\n', '').replace('\n', '') # 去掉换行
return duty, require
# 获取总页数
def get_numbers(self):
url = self.one_url.format(1)
html = self.get_page(url)
numbers = int(html['Data']['Count']) // 10 + 1 # 每页有10个推荐
return numbers
def main(self):
number = self.get_numbers()
for page in range(1, 3):
one_url = self.one_url.format(page)
self.parse_page(one_url)
# 保存到本地json文件:json.dump
json.dump(self.item_list, self.f, ensure_ascii=False)
self.f.close()
if __name__ == '__main__':
start = time.time()
spider = TencentSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end - start))
  以上是本文的全部内容。我希望这将有助于你的学习,我希望你能支持脚本的房子

ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)

网站优化优采云 发表了文章 • 0 个评论 • 134 次浏览 • 2021-09-13 19:21 • 来自相关话题

  ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)
  优采云采集器 can采集AJAX 网页,如果要采集微博,流程基本就是,新建任务-设计规则-制定采集计划-执行采集计划,微博话题规则市场有直接下载。如果你想修改它,你可以在这里修改它。这个采集 软件是免费的。可以多试几次,很容易上手。
  使用ieHTTPHeaders工具获取异步请求的参数,然后使用.NET System.Net中的类模拟Ajax的异步HTTP请求获取服务器返回的数据。
  取出他的url,取出value,提交给他的服务器试试
  Ajax 可以在一定程度上防止网页数据被采集。
  要了解原因,首先要了解网页采集tools的工作原理。大多数流行的网页采集tools都是从文档中的采集信息中读取文档的。
  据说Ajax可以在一定程度上防止网页数据被采集,因为Ajax获取的数据一般是通过js生成标签。这样的标签不在文档中,爬虫自然也抓不到数据。 .
  ajax和js虽然对用户体验有好处,在一定程度上可以防止网页数据被采集,但不利于优化,因为搜索引擎抓取工具的工作原理和网页抓取类似tools ,网络爬虫工具无法抓取的内容,搜索引擎也无法抓取,不利于网站的seo优化。
  一个网站必须有自己的定位,商业网站应该做seo优化增加搜索量,尽量不要用ajax加载大量内容; systemic网站注重实用性,可以使用ajax提升用户体验;内容高的网站原创也可以使用ajax和js加载文档,防止内容被爬取。
  优采云采集器AJAX网页数据怎么写采集rules:优采云采集器可采集AJAX网页,如果要采集微博,流程基本一样,创建一个新的Task-design rules-formulate采集计划-execute采集计划,微博话题的规则可以直接在市场上下载,你可以在这个地方修改,这个采集软件是免费的,试试自己动手几次,很容易上手
  如何使用优采云采集器采集网页信息-:优采云采集器可采集AJAX网页,如果要采集微博,流程基本就是,新建一个任务——设计规则-制定采集计划-实现采集计划,微博话题的规则可以直接在市场上下载,如果要修改可以在这个地方修改,这个采集软件是免费的,你自己多试几次,很容易上手
  网页数据采集,如何使用优采云采集数据-本例:这个使用Forestider很简单,配置两个模板。模板一是从这个页面上的链接中做一个链接提取,你可以选择过滤或收录哪些链接。模板二是点击链接后的下一级数据。以其中一个页面为模板,即可获取到下一级页面数据的所有链接。 优采云我用不 用过,我是学生买不起,不好玩。。。我用的是免费版的Forestider
  请教高手,如何采集AJAX网页?:方法一:想办法找到AJAX请求的网址(firefox应该可以查看网址)。然后访问这个URL,然后按照规则获取。方法二:应该有数据采集器可采集这样的页面数据,你可以下载一个试试,我没用过,哈哈。
  为什么说优采云采集器是最好的网页数据采集器:因为优采云采集器与市面上其他采集软件不同,优采云采集器是不需要复杂的采集Rule 设置,只需点击几下鼠标就可以成功配置一个采集 任务,让体验极其简单,大大提高工作效率。同时,它具有以下三个优点:1、任何人都可以使用 还在学习中...
  优采云采集器如何将数据发布到网站?我不明白!求教!!!!!:网站上贴的函数教程最近更新了,请查收优采云采集器还是很简单的
  c#网页数据抓取ajax:ajax加载的数据其实从源码中是看不到的。源代码都是脚本。目前支持ajax的采集软件只有优采云采集器免费。是 自动识别和响应ajax,这个是从视觉层面提取的,也就是说无论加载什么技术,优采云采集器通过网页显示后提取,也就是你可以得到的数据使用鼠标单击选择查看 只需提取它。具体可以自己试试,优采云采集器网站也有专门的文章​​@讲ajax。
  如何实现采集ajax-生成的数据内容:这是什么?给点意见,我完全不懂ajax。 var dsa = $('#input1').val();// 获取文本框的值就是你要在php页面中传递的值。 // 为了防止缓存,我添加了一个随机参数问题来补充,我提供了php脚本代码,请大家帮我写一下。请新建一个html文件,复制下面的代码进行测试。//为了防止缓存,我添加了一个随机参数来测试,它没有显示出来。我想应该是PHP没有收到值。我的div id名字写错了,php要获取值,参数要改成变量。完整代码如下。经过测试,写的太多了,给你JQUERY
  如何实现采集ajax生成的数据内容: curl_setopt($ch, curlopt_useragent, mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 1.1.4322; .net clr 2.0.50727)); 采集地址上有js生成的内容,用file_get_contents无法获取,也不能用上面的方法得到的。真心求教
  优采云采集器3.2版本可以将采集的内容发布到网站,怎么做-:优采云采集器3.2版本是相对于3.1版本增加了很多有用的功能,比如数据恢复功能,增加发布功能,如果发布到网站,需要自己设置。勾选任务的时候可以选择导出数据时发布到网站,可以自己设置。相关设置OK 查看全部

  ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)
  优采云采集器 can采集AJAX 网页,如果要采集微博,流程基本就是,新建任务-设计规则-制定采集计划-执行采集计划,微博话题规则市场有直接下载。如果你想修改它,你可以在这里修改它。这个采集 软件是免费的。可以多试几次,很容易上手。
  使用ieHTTPHeaders工具获取异步请求的参数,然后使用.NET System.Net中的类模拟Ajax的异步HTTP请求获取服务器返回的数据。
  取出他的url,取出value,提交给他的服务器试试
  Ajax 可以在一定程度上防止网页数据被采集。
  要了解原因,首先要了解网页采集tools的工作原理。大多数流行的网页采集tools都是从文档中的采集信息中读取文档的。
  据说Ajax可以在一定程度上防止网页数据被采集,因为Ajax获取的数据一般是通过js生成标签。这样的标签不在文档中,爬虫自然也抓不到数据。 .
  ajax和js虽然对用户体验有好处,在一定程度上可以防止网页数据被采集,但不利于优化,因为搜索引擎抓取工具的工作原理和网页抓取类似tools ,网络爬虫工具无法抓取的内容,搜索引擎也无法抓取,不利于网站的seo优化。
  一个网站必须有自己的定位,商业网站应该做seo优化增加搜索量,尽量不要用ajax加载大量内容; systemic网站注重实用性,可以使用ajax提升用户体验;内容高的网站原创也可以使用ajax和js加载文档,防止内容被爬取。
  优采云采集器AJAX网页数据怎么写采集rules:优采云采集器可采集AJAX网页,如果要采集微博,流程基本一样,创建一个新的Task-design rules-formulate采集计划-execute采集计划,微博话题的规则可以直接在市场上下载,你可以在这个地方修改,这个采集软件是免费的,试试自己动手几次,很容易上手
  如何使用优采云采集器采集网页信息-:优采云采集器可采集AJAX网页,如果要采集微博,流程基本就是,新建一个任务——设计规则-制定采集计划-实现采集计划,微博话题的规则可以直接在市场上下载,如果要修改可以在这个地方修改,这个采集软件是免费的,你自己多试几次,很容易上手
  网页数据采集,如何使用优采云采集数据-本例:这个使用Forestider很简单,配置两个模板。模板一是从这个页面上的链接中做一个链接提取,你可以选择过滤或收录哪些链接。模板二是点击链接后的下一级数据。以其中一个页面为模板,即可获取到下一级页面数据的所有链接。 优采云我用不 用过,我是学生买不起,不好玩。。。我用的是免费版的Forestider
  请教高手,如何采集AJAX网页?:方法一:想办法找到AJAX请求的网址(firefox应该可以查看网址)。然后访问这个URL,然后按照规则获取。方法二:应该有数据采集器可采集这样的页面数据,你可以下载一个试试,我没用过,哈哈。
  为什么说优采云采集器是最好的网页数据采集器:因为优采云采集器与市面上其他采集软件不同,优采云采集器是不需要复杂的采集Rule 设置,只需点击几下鼠标就可以成功配置一个采集 任务,让体验极其简单,大大提高工作效率。同时,它具有以下三个优点:1、任何人都可以使用 还在学习中...
  优采云采集器如何将数据发布到网站?我不明白!求教!!!!!:网站上贴的函数教程最近更新了,请查收优采云采集器还是很简单的
  c#网页数据抓取ajax:ajax加载的数据其实从源码中是看不到的。源代码都是脚本。目前支持ajax的采集软件只有优采云采集器免费。是 自动识别和响应ajax,这个是从视觉层面提取的,也就是说无论加载什么技术,优采云采集器通过网页显示后提取,也就是你可以得到的数据使用鼠标单击选择查看 只需提取它。具体可以自己试试,优采云采集器网站也有专门的文章​​@讲ajax。
  如何实现采集ajax-生成的数据内容:这是什么?给点意见,我完全不懂ajax。 var dsa = $('#input1').val();// 获取文本框的值就是你要在php页面中传递的值。 // 为了防止缓存,我添加了一个随机参数问题来补充,我提供了php脚本代码,请大家帮我写一下。请新建一个html文件,复制下面的代码进行测试。//为了防止缓存,我添加了一个随机参数来测试,它没有显示出来。我想应该是PHP没有收到值。我的div id名字写错了,php要获取值,参数要改成变量。完整代码如下。经过测试,写的太多了,给你JQUERY
  如何实现采集ajax生成的数据内容: curl_setopt($ch, curlopt_useragent, mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 1.1.4322; .net clr 2.0.50727)); 采集地址上有js生成的内容,用file_get_contents无法获取,也不能用上面的方法得到的。真心求教
  优采云采集器3.2版本可以将采集的内容发布到网站,怎么做-:优采云采集器3.2版本是相对于3.1版本增加了很多有用的功能,比如数据恢复功能,增加发布功能,如果发布到网站,需要自己设置。勾选任务的时候可以选择导出数据时发布到网站,可以自己设置。相关设置OK

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2021-09-08 22:08 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1、介绍
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  在上一篇python使用xslt提取网页数据的文章中,提取的内容是直接从网页源代码中获取的。但是部分Ajax动态内容在源码中找不到,需要找一个合适的库来加载异步或动态加载的内容,交给本项目的提取器提取。
  Python 可以使用 selenium 来执行 javascript,而 selenium 可以让浏览器自动加载页面并获取所需的数据。 Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源代码及实验过程
  假设我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:利用客户集合的直观打标签功能查找多个站,可以极快的自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面的程序中。注:本文仅记录实验过程。在实际系统中,xslt程序会以多种方式注入到内容提取器中。
  
  第2步:执行如下代码(windows10下测试,python3.2,源码下载地址文章end GitHub),请注意:xslt是一个比较长的字符串,如果你删掉这个字符串,代码没几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取
  
  4、阅读下一个
  到目前为止,我们已经通过两篇文章 文章演示了如何抓取静态和动态网页内容。两者都使用 xslt 一次从网页中提取所需的内容。实际上,xslt 是一种更复杂的编程语言。写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇《1分钟快速生成用于网页内容提取的Xslt》将介绍如何生成xslt。
  5、汇聚GooSeeker开源代码下载源码
  1.GooSeeker 开源 Python 网络爬虫 GitHub 源码
  6、文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1、介绍
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  在上一篇python使用xslt提取网页数据的文章中,提取的内容是直接从网页源代码中获取的。但是部分Ajax动态内容在源码中找不到,需要找一个合适的库来加载异步或动态加载的内容,交给本项目的提取器提取。
  Python 可以使用 selenium 来执行 javascript,而 selenium 可以让浏览器自动加载页面并获取所需的数据。 Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源代码及实验过程
  假设我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:利用客户集合的直观打标签功能查找多个站,可以极快的自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面的程序中。注:本文仅记录实验过程。在实际系统中,xslt程序会以多种方式注入到内容提取器中。
  
  第2步:执行如下代码(windows10下测试,python3.2,源码下载地址文章end GitHub),请注意:xslt是一个比较长的字符串,如果你删掉这个字符串,代码没几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取
  
  4、阅读下一个
  到目前为止,我们已经通过两篇文章 文章演示了如何抓取静态和动态网页内容。两者都使用 xslt 一次从网页中提取所需的内容。实际上,xslt 是一种更复杂的编程语言。写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇《1分钟快速生成用于网页内容提取的Xslt》将介绍如何生成xslt。
  5、汇聚GooSeeker开源代码下载源码
  1.GooSeeker 开源 Python 网络爬虫 GitHub 源码
  6、文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址

ajax抓取网页内容( ():)

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2021-09-08 22:07 • 来自相关话题

  ajax抓取网页内容(
():)
  ajax获取网页的cookie值并处理页面信息
  注意:没有必要。后台可以直接操作数据,不用ajax更简单
  ($sn_arr = $_COOKIE;) ---------------获取所有cookies进行过滤操作
  1.js(页面加载0.5ms后执行该函数)
   $(function(){
setTimeout(function () {
$.ajax({
url:"/supplierbuyer/order/getCookie",
data:{
},
type:"POST",
dataType:"JSON",
success:function(data){
if(data.status==true){
//处理cookie的数据
var cookie_content = data['sn_arr'];
$.each(cookie_content, function(index, item){
if (index.startsWith("order_sn_")) {
var order_sn = index.substr(9);
$('.'+order_sn).text('');
$('.'+order_sn).parent().prev().css("background","");
}
});
}else{
console.log(data);
return false;
}
}
});
}, 0.5);
});
  2.php
   /**
* 获取cookie
*/
public function getCookie()
{
$sn_arr = $_COOKIE;
if ($sn_arr) {
$data['status'] = true;
$data['sn_arr'] = $sn_arr;
$data['msg'] = 'ok';
} else {
$data['status'] = false;
$data['sn_arr'] = '';
$data['msg'] = '网络错误,请稍后重试~';
}
echo json_encode($data);
exit();
}
  posted @ 2018-12-05 16:13 很有趣。阅读(4510)review(0)edit
  ) 查看全部

  ajax抓取网页内容(
():)
  ajax获取网页的cookie值并处理页面信息
  注意:没有必要。后台可以直接操作数据,不用ajax更简单
  ($sn_arr = $_COOKIE;) ---------------获取所有cookies进行过滤操作
  1.js(页面加载0.5ms后执行该函数)
   $(function(){
setTimeout(function () {
$.ajax({
url:"/supplierbuyer/order/getCookie",
data:{
},
type:"POST",
dataType:"JSON",
success:function(data){
if(data.status==true){
//处理cookie的数据
var cookie_content = data['sn_arr'];
$.each(cookie_content, function(index, item){
if (index.startsWith("order_sn_")) {
var order_sn = index.substr(9);
$('.'+order_sn).text('');
$('.'+order_sn).parent().prev().css("background","");
}
});
}else{
console.log(data);
return false;
}
}
});
}, 0.5);
});
  2.php
   /**
* 获取cookie
*/
public function getCookie()
{
$sn_arr = $_COOKIE;
if ($sn_arr) {
$data['status'] = true;
$data['sn_arr'] = $sn_arr;
$data['msg'] = 'ok';
} else {
$data['status'] = false;
$data['sn_arr'] = '';
$data['msg'] = '网络错误,请稍后重试~';
}
echo json_encode($data);
exit();
}
  posted @ 2018-12-05 16:13 很有趣。阅读(4510)review(0)edit
  )

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2021-09-24 20:01 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1 简介
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。
  Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源码及实验过程
  如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:使用直观的采集和搜索客户标记功能,可以很快自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面可以在程序中。注:本文仅记录实验过程。在实际系统中,xslt 程序会以多种方式注入到内容提取器中。
  
  第二步:执行如下代码(windows10下测试,python3.2,源码下载地址可在文章末尾的GitHub上找到),请注意:xslt是比较长的字符串,如果删除这个字符串,代码不是几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取了
  
  4. 阅读下一步
  至此,我们已经演示了如何通过两个文章来抓取静态和动态的网页内容,这两个文章都使用xslt一次从网页中提取需要的内容。实际上,xslt 是一种更复杂的编程语言。如果你手动写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇文章《1分钟快速生成用于Web内容提取的Xslt》将介绍如何生成xslt。
  5.采集GooSeeker开源代码下载源码
  1.GooSeeker开源Python网络爬虫GitHub源码
  6. 文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1 简介
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。
  Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源码及实验过程
  如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:使用直观的采集和搜索客户标记功能,可以很快自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面可以在程序中。注:本文仅记录实验过程。在实际系统中,xslt 程序会以多种方式注入到内容提取器中。
  
  第二步:执行如下代码(windows10下测试,python3.2,源码下载地址可在文章末尾的GitHub上找到),请注意:xslt是比较长的字符串,如果删除这个字符串,代码不是几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取了
  
  4. 阅读下一步
  至此,我们已经演示了如何通过两个文章来抓取静态和动态的网页内容,这两个文章都使用xslt一次从网页中提取需要的内容。实际上,xslt 是一种更复杂的编程语言。如果你手动写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇文章《1分钟快速生成用于Web内容提取的Xslt》将介绍如何生成xslt。
  5.采集GooSeeker开源代码下载源码
  1.GooSeeker开源Python网络爬虫GitHub源码
  6. 文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址

ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-09-22 12:07 • 来自相关话题

  ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)
  可能有一个朋友会奇怪,网站 @ @ @ @ @ @ @ of你让搜索引擎,你怎么能让网站页面内容没有被捕?
  首先,可以分开的重量是有限的,即使是PR10站,也是不受限制的中间的。这种权重包括其他人网站和网站的内链。
  以下内容,除非它是一个想要被束缚的人。否则外链是让搜索引擎捕获。这不属于本文的范围。
  和内链,因为某些网站有很多重复或冗余内容。例如,一些搜索结果按照条件。特别是一些B2C站,在专门查询页面或所有产品页面的某些位置,您可以按产品类型,型号,颜色,大小等分类。虽然这些页面对于观众来说很方便,但是对于搜索引擎来说,这是蜘蛛的非常大的抓取时间,尤其是网站页面。与此同时,页面权将被分散,SEO是不利的。
  不同的网站 management登录页面,备份页面,测试页等,并且网站管理员不希望搜索引擎收录。
  所以需要让网页或某些页面不是收录。
  作者将首先介绍一些方式:
  1. @k展不被收录 / p>
  众所周知,搜索引擎的容量有限的闪存的内容,并且Flash内的所有内容都不能完全抓取。但遗憾的是,不可能完全保证闪存的所有内容都不会被捕获。因为谷歌和Adobe正在努力实施Flash履带技术。
  2.使用Robos文件
  这是一种临时最有效的方式,但是有很大的缺点。只是不通过任何内容和链接。每个人都知道SEO中的一个健康页面应该可用。有一个连接到外链的链接,还有一个连接到外部网站的链接,所以可以控制机器人文件,以便搜索引擎不知道内容是什么。此页面将设置为低质量页面。体重可能受到某些惩罚的惩罚。这主要用于网站管理页面,测试页等。
  3.使用nofollow标签包不想在收录 @ / p>
  此方法并不完全保证它不是收录,因为这不是严格需要遵守的标签。此外,如果有一个带有nofollow标记的页面的外部网站链条。这很可能被搜索引擎捕获。
  4.使用meta noindex tab plus关注标记
  此方法可以防止收录并且也可以通过重量。你想通过,看看网站建立一个网站管理员自己的需求。这种方法的缺点是它也是蜘蛛的巨大浪费。
  5.在使用机器人文件显示页面上的iframe标签显示搜索引擎收录可以阻止除iframe标记之外的内容来自收录。因此,您可以将内容放在正常页面标签下我不想收录。我希望被收录 收录。
  遵循,然后说该方法无效,请勿将来使用这些方法。
  1. table
  谷歌和百度已经捕获了表单使用的内容,无法停止收录。
  2.使用javascript和ajax技术
  与目前的技术,Ajax和JavaScript的结果目前以HTML的形式将HTML的结果定义为浏览器,因此这也无法阻止收录。 查看全部

  ajax抓取网页内容(网站页面不是让搜索引擎抓的越多越好吗)
  可能有一个朋友会奇怪,网站 @ @ @ @ @ @ @ of你让搜索引擎,你怎么能让网站页面内容没有被捕?
  首先,可以分开的重量是有限的,即使是PR10站,也是不受限制的中间的。这种权重包括其他人网站和网站的内链。
  以下内容,除非它是一个想要被束缚的人。否则外链是让搜索引擎捕获。这不属于本文的范围。
  和内链,因为某些网站有很多重复或冗余内容。例如,一些搜索结果按照条件。特别是一些B2C站,在专门查询页面或所有产品页面的某些位置,您可以按产品类型,型号,颜色,大小等分类。虽然这些页面对于观众来说很方便,但是对于搜索引擎来说,这是蜘蛛的非常大的抓取时间,尤其是网站页面。与此同时,页面权将被分散,SEO是不利的。
  不同的网站 management登录页面,备份页面,测试页等,并且网站管理员不希望搜索引擎收录。
  所以需要让网页或某些页面不是收录。
  作者将首先介绍一些方式:
  1. @k展不被收录 / p>
  众所周知,搜索引擎的容量有限的闪存的内容,并且Flash内的所有内容都不能完全抓取。但遗憾的是,不可能完全保证闪存的所有内容都不会被捕获。因为谷歌和Adobe正在努力实施Flash履带技术。
  2.使用Robos文件
  这是一种临时最有效的方式,但是有很大的缺点。只是不通过任何内容和链接。每个人都知道SEO中的一个健康页面应该可用。有一个连接到外链的链接,还有一个连接到外部网站的链接,所以可以控制机器人文件,以便搜索引擎不知道内容是什么。此页面将设置为低质量页面。体重可能受到某些惩罚的惩罚。这主要用于网站管理页面,测试页等。
  3.使用nofollow标签包不想在收录 @ / p>
  此方法并不完全保证它不是收录,因为这不是严格需要遵守的标签。此外,如果有一个带有nofollow标记的页面的外部网站链条。这很可能被搜索引擎捕获。
  4.使用meta noindex tab plus关注标记
  此方法可以防止收录并且也可以通过重量。你想通过,看看网站建立一个网站管理员自己的需求。这种方法的缺点是它也是蜘蛛的巨大浪费。
  5.在使用机器人文件显示页面上的iframe标签显示搜索引擎收录可以阻止除iframe标记之外的内容来自收录。因此,您可以将内容放在正常页面标签下我不想收录。我希望被收录 收录。
  遵循,然后说该方法无效,请勿将来使用这些方法。
  1. table
  谷歌和百度已经捕获了表单使用的内容,无法停止收录。
  2.使用javascript和ajax技术
  与目前的技术,Ajax和JavaScript的结果目前以HTML的形式将HTML的结果定义为浏览器,因此这也无法阻止收录。

ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2021-09-22 12:05 • 来自相关话题

  ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)
  什么是用于动态网页数据捕获的Ajax:
  Ajax(异步JavaScript和XML)异步JavaScript和XML。Ajax可以通过在后台与服务器交换少量数据来实现web页面的异步更新。这意味着可以在不重新加载整个网页的情况下更新网页的一部分。如果需要更新内容,传统web页面(没有Ajax)必须重新加载整个web页面。因为传统的传输数据格式使用XML语法。因此,它被称为Ajax。事实上,现在数据交互基本上使用JSON。使用Ajax加载的数据,即使使用了JS,也会呈现到浏览器中。右键单击->查看网页源代码时,仍然无法看到通过Ajax加载的数据。您只能看到使用此URL加载的HTML代码
  如何获取ajax数据:直接分析ajax调用的接口。然后通过代码请求这个接口。使用selenium+chromedriver模拟浏览器行为并获取数据
  模式
  优势
  缺点
  分析接口
  可以直接请求数据。不需要进行一些解析。代码少,性能高
  分析接口比较复杂,特别是一些通过JS混淆的接口。你应该有一个特定的JS基金会。作为爬行动物很容易被发现
  硒
  直接模拟浏览器的行为。如果浏览器可以请求,您也可以使用selenium进行请求。爬行动物更稳定
  很多代码。低性能
  Selenium+chromedriver可获得动态数据:
  硒是一个机器人。它可以模拟浏览器上的一些人类行为,并自动处理浏览器上的一些行为,如单击、填充数据、删除cookie等。Chromedriver是Chrome浏览器的驱动程序。只有使用它才能驱动浏览器。当然,不同的浏览器有不同的驱动程序。下面列出了不同的浏览器及其相应的驱动程序:
  Chrome:Firefox:Edge:Safari:install selenium:selenium有多种语言,包括Java、ruby、python等。我们可以下载python版本。PIP安装selenium安装chromedriver:下载后,未经许可将其放入纯英文目录。安装selenium和chromedriver:快速入门:
  from selenium import webdriver
# chromedriver的绝对路径
driver_path = r'D:\ProgramApp\chromedriver\chromedriver.exe'
# 初始化一个driver,并且指定chromedriver的路径
driver = webdriver.Chrome(executable_path=driver_path)
# 请求网页
driver.get("https://www.baidu.com/")
# 通过page_source获取网页源代码
print(driver.page_source)
  Selenium常见操作:
  更多教程参考:
  关闭页面:驱动程序。Close():关闭当前页面。司机。退出():退出整个浏览器。定位元素:
  请注意,find_u元素是满足条件的第一个元素。find_u元素是获取所有满足条件的元素
  find_element_by_id:根据id来查找某个元素。等价于:
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
find_element_by_class_name:根据类名查找元素。 等价于:
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
find_element_by_name:根据name属性的值来查找元素。等价于:
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
find_element_by_tag_name:根据标签名来查找元素。等价于:
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
find_element_by_xpath:根据xpath语法来获取元素。等价于:
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
find_element_by_css_selector:根据css选择器选择元素。等价于:
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
  行动形式要素:
  操作输入框:分为两步。步骤1:找到这个元素。步骤2:使用发送键(值)填写数据。示例代码如下所示:
  inputTag=driver.find u元素uu按u id('kw')查找
  inputTag.send ukeys('python'))
  使用“清除”方法清除输入框的内容。示例代码如下所示:
  输入ag.clear()
  操作复选框:由于要选择复选框选项卡,请在网页中单击它。因此,如果要选择复选框标记,请先选择标记,然后执行click事件。示例代码如下所示:
  rememberTag=driver.find uu元素uu按名称(“rememberMe”)
  记住标记。单击()
  选择:不能直接单击选择元素。因为您需要在单击后选择图元。此时,selenium为select标记提供了一个类selenium.webdriver.support.ui.select。将获取的元素作为参数传递给此类以创建此对象。以后可以使用此对象进行选择。示例代码如下所示:
  从selenium.webdriver.support.ui导入选择
  #选中此选项卡并使用“选择”创建对象
  selectTag=Select(驱动程序。按名称查找元素(“跳转菜单”))
  #按索引选择
  selectTag.select按索引(1)
  #按值选择
  选择标签。按值(“”)选择标签
  #基于可视文本进行选择
  Selecttag.select通过可视文本(“95显示客户端”)
  #取消选中所有选项
  选择Tag.取消选择_all()
  操作按钮:操作按钮有很多种方式,如点击、右击、双击等,最常用的方式之一是点击,直接调用点击功能即可,示例代码如下:
  inputTag=驱动程序。通过\u id('su')查找\u元素\u
  inputTag.click()
  行为链:
  有时页面上的操作可能需要很多步骤,因此您可以使用鼠标行为链类actionchains来完成。例如,现在您希望将鼠标移动到元素上并执行单击事件。示例代码如下:
  inputTag = driver.find_element_by_id('kw')
submitTag = driver.find_element_by_id('su')
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
  还有更多与鼠标相关的操作
  Cookie操作:
  获取所有的cookie:
for cookie in driver.get_cookies():
print(cookie)
根据cookie的key获取value:
value = driver.get_cookie(key)
删除所有的cookie:
driver.delete_all_cookies()
删除某个cookie:
driver.delete_cookie(key)
  页面等待:
  如今,越来越多的web页面采用Ajax技术,因此程序无法确定元素何时完全加载。如果实际页面等待太长时间,导致DOM元素无法出现,但您的代码直接使用web元素,则会抛出空指针异常。为了解决此问题,selenium提供了两种方法HOD,如等待模式:一种是隐式等待,另一种是显式等待
  隐式等待:调用driver.implicitly\u wait。然后等待10秒,然后获取不可用的元素。示例代码如下
  driver = webdriver.Chrome(executable_path=driver_path)
driver.implicitly_wait(10)
# 请求网页
driver.get("https://www.douban.com/")
  2/显示等待:显示等待表示在建立条件之前不执行获取元素的操作。您还可以指定等待的最长时间。如果超过此时间,将引发异常。应使用selenium.webdriver.support.excepted的预期条件完成显示等待_conditions和selenium.webdriver.support.ui.webdriverwait示例代码如下:
   from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
  其他一些等候条件:
  参考更多条件:
  切换页面:
  有时窗口中有许多子选项卡页。此时,必须切换
  Selenium提供了一个switch_to_窗口来切换。要切换到的特定页面可以在driver.window_句柄中找到。示例代码如下:
  # 打开一个新的页面
self.driver.execute_script("window.open('https://www.baidu.com')")
#显示当前页面的url
driver.current_url //还是百度页面
# 切换到这个新的页面中
driver.switch_to_window(driver.window_handles[1])
  设置代理IP:
  有时候我们会经常抓取一些网页,当服务器发现你是一个抓取者时,它会阻止你的IP地址,这时我们可以更改代理IP,更改代理IP对于不同的浏览器有不同的实现方法,这里以Chrome browser为例:
  from selenium import webdriver
options = webdriver.ChromeOptions() //设置存储浏览器的信息
//添加代理服务器
options.add_argument("--proxy-server=http://110.73.2.248:8123")
driver_path = r"D:\ProgramApp\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')
  Webelement元素:
  从selenium.webdriver.remote.webelement导入webelement类是每个获取的元素所属的类
  有一些共同的属性:
  Get_attribute:此标记的属性值
  截图:获取当前页面的截图。此方法只能用于驱动程序
  驱动程序的对象类也继承自webelement 查看全部

  ajax抓取网页内容(动态网页数据抓取什么是AJAX:selenium直接模拟浏览器)
  什么是用于动态网页数据捕获的Ajax:
  Ajax(异步JavaScript和XML)异步JavaScript和XML。Ajax可以通过在后台与服务器交换少量数据来实现web页面的异步更新。这意味着可以在不重新加载整个网页的情况下更新网页的一部分。如果需要更新内容,传统web页面(没有Ajax)必须重新加载整个web页面。因为传统的传输数据格式使用XML语法。因此,它被称为Ajax。事实上,现在数据交互基本上使用JSON。使用Ajax加载的数据,即使使用了JS,也会呈现到浏览器中。右键单击->查看网页源代码时,仍然无法看到通过Ajax加载的数据。您只能看到使用此URL加载的HTML代码
  如何获取ajax数据:直接分析ajax调用的接口。然后通过代码请求这个接口。使用selenium+chromedriver模拟浏览器行为并获取数据
  模式
  优势
  缺点
  分析接口
  可以直接请求数据。不需要进行一些解析。代码少,性能高
  分析接口比较复杂,特别是一些通过JS混淆的接口。你应该有一个特定的JS基金会。作为爬行动物很容易被发现
  硒
  直接模拟浏览器的行为。如果浏览器可以请求,您也可以使用selenium进行请求。爬行动物更稳定
  很多代码。低性能
  Selenium+chromedriver可获得动态数据:
  硒是一个机器人。它可以模拟浏览器上的一些人类行为,并自动处理浏览器上的一些行为,如单击、填充数据、删除cookie等。Chromedriver是Chrome浏览器的驱动程序。只有使用它才能驱动浏览器。当然,不同的浏览器有不同的驱动程序。下面列出了不同的浏览器及其相应的驱动程序:
  Chrome:Firefox:Edge:Safari:install selenium:selenium有多种语言,包括Java、ruby、python等。我们可以下载python版本。PIP安装selenium安装chromedriver:下载后,未经许可将其放入纯英文目录。安装selenium和chromedriver:快速入门:
  from selenium import webdriver
# chromedriver的绝对路径
driver_path = r'D:\ProgramApp\chromedriver\chromedriver.exe'
# 初始化一个driver,并且指定chromedriver的路径
driver = webdriver.Chrome(executable_path=driver_path)
# 请求网页
driver.get("https://www.baidu.com/";)
# 通过page_source获取网页源代码
print(driver.page_source)
  Selenium常见操作:
  更多教程参考:
  关闭页面:驱动程序。Close():关闭当前页面。司机。退出():退出整个浏览器。定位元素:
  请注意,find_u元素是满足条件的第一个元素。find_u元素是获取所有满足条件的元素
  find_element_by_id:根据id来查找某个元素。等价于:
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
find_element_by_class_name:根据类名查找元素。 等价于:
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
find_element_by_name:根据name属性的值来查找元素。等价于:
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
find_element_by_tag_name:根据标签名来查找元素。等价于:
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
find_element_by_xpath:根据xpath语法来获取元素。等价于:
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
find_element_by_css_selector:根据css选择器选择元素。等价于:
submitTag = driver.find_element_by_css_selector('//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')
  行动形式要素:
  操作输入框:分为两步。步骤1:找到这个元素。步骤2:使用发送键(值)填写数据。示例代码如下所示:
  inputTag=driver.find u元素uu按u id('kw')查找
  inputTag.send ukeys('python'))
  使用“清除”方法清除输入框的内容。示例代码如下所示:
  输入ag.clear()
  操作复选框:由于要选择复选框选项卡,请在网页中单击它。因此,如果要选择复选框标记,请先选择标记,然后执行click事件。示例代码如下所示:
  rememberTag=driver.find uu元素uu按名称(“rememberMe”)
  记住标记。单击()
  选择:不能直接单击选择元素。因为您需要在单击后选择图元。此时,selenium为select标记提供了一个类selenium.webdriver.support.ui.select。将获取的元素作为参数传递给此类以创建此对象。以后可以使用此对象进行选择。示例代码如下所示:
  从selenium.webdriver.support.ui导入选择
  #选中此选项卡并使用“选择”创建对象
  selectTag=Select(驱动程序。按名称查找元素(“跳转菜单”))
  #按索引选择
  selectTag.select按索引(1)
  #按值选择
  选择标签。按值(“”)选择标签
  #基于可视文本进行选择
  Selecttag.select通过可视文本(“95显示客户端”)
  #取消选中所有选项
  选择Tag.取消选择_all()
  操作按钮:操作按钮有很多种方式,如点击、右击、双击等,最常用的方式之一是点击,直接调用点击功能即可,示例代码如下:
  inputTag=驱动程序。通过\u id('su')查找\u元素\u
  inputTag.click()
  行为链:
  有时页面上的操作可能需要很多步骤,因此您可以使用鼠标行为链类actionchains来完成。例如,现在您希望将鼠标移动到元素上并执行单击事件。示例代码如下:
  inputTag = driver.find_element_by_id('kw')
submitTag = driver.find_element_by_id('su')
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
  还有更多与鼠标相关的操作
  Cookie操作:
  获取所有的cookie:
for cookie in driver.get_cookies():
print(cookie)
根据cookie的key获取value:
value = driver.get_cookie(key)
删除所有的cookie:
driver.delete_all_cookies()
删除某个cookie:
driver.delete_cookie(key)
  页面等待:
  如今,越来越多的web页面采用Ajax技术,因此程序无法确定元素何时完全加载。如果实际页面等待太长时间,导致DOM元素无法出现,但您的代码直接使用web元素,则会抛出空指针异常。为了解决此问题,selenium提供了两种方法HOD,如等待模式:一种是隐式等待,另一种是显式等待
  隐式等待:调用driver.implicitly\u wait。然后等待10秒,然后获取不可用的元素。示例代码如下
  driver = webdriver.Chrome(executable_path=driver_path)
driver.implicitly_wait(10)
# 请求网页
driver.get("https://www.douban.com/";)
  2/显示等待:显示等待表示在建立条件之前不执行获取元素的操作。您还可以指定等待的最长时间。如果超过此时间,将引发异常。应使用selenium.webdriver.support.excepted的预期条件完成显示等待_conditions和selenium.webdriver.support.ui.webdriverwait示例代码如下:
   from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading";)
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
  其他一些等候条件:
  参考更多条件:
  切换页面:
  有时窗口中有许多子选项卡页。此时,必须切换
  Selenium提供了一个switch_to_窗口来切换。要切换到的特定页面可以在driver.window_句柄中找到。示例代码如下:
  # 打开一个新的页面
self.driver.execute_script("window.open('https://www.baidu.com')")
#显示当前页面的url
driver.current_url //还是百度页面
# 切换到这个新的页面中
driver.switch_to_window(driver.window_handles[1])
  设置代理IP:
  有时候我们会经常抓取一些网页,当服务器发现你是一个抓取者时,它会阻止你的IP地址,这时我们可以更改代理IP,更改代理IP对于不同的浏览器有不同的实现方法,这里以Chrome browser为例:
  from selenium import webdriver
options = webdriver.ChromeOptions() //设置存储浏览器的信息
//添加代理服务器
options.add_argument("--proxy-server=http://110.73.2.248:8123";)
driver_path = r"D:\ProgramApp\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')
  Webelement元素:
  从selenium.webdriver.remote.webelement导入webelement类是每个获取的元素所属的类
  有一些共同的属性:
  Get_attribute:此标记的属性值
  截图:获取当前页面的截图。此方法只能用于驱动程序
  驱动程序的对象类也继承自webelement

ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)

网站优化优采云 发表了文章 • 0 个评论 • 123 次浏览 • 2021-09-21 07:37 • 来自相关话题

  ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)
  抓取前端呈现页面
  随着Ajax技术的不断普及和angularjs等单页应用框架的出现,越来越多的页面被JS呈现。对于爬虫来说,这种页面很烦人:仅提取HTML内容通常无法获得有效信息。那么如何处理这种页面呢?一般来说,有两种方法:
  在爬行阶段,浏览器内核内置到爬行器中,页面在爬行之前由JS呈现。这方面的相应工具是selenium、htmlunit或phantom JS。然而,这些工具存在一些效率问题,并且不太稳定。其优点是编写规则与静态页面相同。由于JS呈现页面的数据也是从后端获取的,基本上是通过Ajax获取的,因此分析Ajax请求并找到相应的数据请求也是可行的。此外,与页面样式相比,此界面不太可能更改。缺点是找到这个请求并模拟它是一个相对困难的过程,需要相对较多的分析经验
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法可以节省时间和精力。然而,对于长期和大规模的需求,第二个将更可靠。对于一些站点,甚至是一些JS技术,目前,第一种方法基本上是万能的,第二种方法将非常复杂
  对于第一种方法,webmagic selenium就是这样一种尝试。它定义了一个downloader,在下载页面时使用浏览器内核进行渲染。Selenium的配置很复杂,取决于平台和版本。没有稳定的计划。如果您感兴趣,可以查看我的博客:使用selenium抓取动态加载的页面
  这里主要介绍第二种方法。我希望您会发现解析前端呈现页面并没有那么复杂。这里我们以安格拉斯华人社区为例
  如何判断前端渲染
  判断页面是否以JS呈现的方法相对简单。在浏览器中直接查看源代码(windows中为Ctrl+u,MAC中为Command+Alt+u)。如果找不到有效的信息,基本上肯定会在JS中呈现
  
  
  在本例中,如果在源代码中找不到页面中的标题“优孚计算机网络-前端攻城师”,则可以断定是JS渲染,数据是通过Ajax获取的
  分析请求
  让我们转到最难的部分:查找数据请求。此步骤可以帮助我们的工具,主要是用于在浏览器中查看网络请求的开发人员工具
  以chome为例。让我们打开“开发者工具”(windows上的F12和MAC上的Command+Alt+I),然后再次刷新页面(它也可能是一个下拉页面,简而言之,所有您认为可能触发新数据的操作),然后记住保留场景并逐个分析请求
  这一步需要一点耐心,但并非没有规则可循。首先可以帮助我们的是上面的分类过滤器(所有、文档等)。如果是普通的Ajax,它将显示在XHR标记下,jsonp请求将显示在scripts标记下。这是两种常见的数据类型
  然后你可以根据数据的大小来判断。通常,结果的大小越大,越有可能是返回数据的接口。其余取决于经验。例如,这里的“最新的?P=1&s=20”乍一看是可疑的
  
  对于可疑地址,您可以查看响应主体是什么。我们无法在开发人员工具中清楚地看到它。我们将URL复制到地址栏并再次请求它(如果您安装了chrome推荐的JSON查看器,则可以方便地查看Ajax结果)。看看结果,我们似乎找到了我们想要的
  
  同样,我们转到“发布详细信息”页面,找到了对特定内容的请求:
  程序设计
  如果您回忆一下前面的列表+目标页面示例,您会发现我们这次的需求与之前的需求类似,但是它们被Ajax-Ajax列表、Ajax数据所取代,返回的数据变成JSON。然后,我们仍然可以使用最后一种方法在两页中编写:
  数据表
  在这个列表页面中,我们需要找到有效的信息来帮助我们构建目标Ajax的URL。在这里,我们看到这个ID应该是我们想要的帖子的ID,而帖子详细信息请求由一些固定URL加上这个ID组成。因此,在这一步中,我们手动构造URL并将其添加到要获取的队列中。这里,我们使用选择语言jsonpath来选择数据(webmatic扩展包中提供了jsonpathselector来支持它)
   if (page.getUrl().regex(LIST_URL).match()) {
//这里我们使用JSONPATH这种选择语言来选择数据
List ids = new JsonPathSelector("$.data[*]._id").selectList(page.getRawText());
if (CollectionUtils.isNotEmpty(ids)) {
for (String id : ids) {
page.addTargetRequest("http://angularjs.cn/api/article/"+id);
}
}
}
  目标数据
  使用URL,解析目标数据实际上非常简单。因为JSON数据是完全结构化的,所以我们节省了分析页面和编写XPath的过程。这里我们仍然使用jsonpath来获取标题和内容
   page.putField("title", new JsonPathSelector("$.data.title").select(page.getRawText()));
page.putField("content", new JsonPathSelector("$.data.content").select(page.getRawText()));
  有关此示例的完整代码,请参见angularjsprocessor。爪哇
  总结
  在本例中,我们分析了一个经典的动态页面爬行过程。事实上,动态页面抓取的最大区别在于它增加了链接发现的难度。让我们比较两种开发模式:
  后端呈现页面
  下载辅助页面=>发现链接=>下载并分析目标HTML
  前端呈现页面
  找到的辅助数据=>构造链接=>下载并分析目标Ajax
  对于不同的站点,这些辅助数据可能在HTML页面中预输出,可能通过Ajax请求,甚至是一个多数据请求的过程,但这种模式基本上是固定的
  但是,这些数据请求的分析仍然比页面分析复杂得多,因此这实际上是动态页面捕获的难点
  本示例的目的是提供一种模式,在分析请求后,可以遵循该模式准备此类爬虫程序,即查找辅助数据=>构造链接=>下载并分析目标Ajax模式
  附言:
  WebMagic0.5.0之后,JSON的支持将添加到链API中。将来,您可以使用:
  page.getJson().jsonPath("$.name").get();
  这种方法可以解析Ajax请求
  它还支持
  page.getJson().removePadding("callback").jsonPath("$.name").get();
  这是解析jsonp请求的方法 查看全部

  ajax抓取网页内容(AngularJS抓取前端渲染的页面是怎么处理这种页面的?)
  抓取前端呈现页面
  随着Ajax技术的不断普及和angularjs等单页应用框架的出现,越来越多的页面被JS呈现。对于爬虫来说,这种页面很烦人:仅提取HTML内容通常无法获得有效信息。那么如何处理这种页面呢?一般来说,有两种方法:
  在爬行阶段,浏览器内核内置到爬行器中,页面在爬行之前由JS呈现。这方面的相应工具是selenium、htmlunit或phantom JS。然而,这些工具存在一些效率问题,并且不太稳定。其优点是编写规则与静态页面相同。由于JS呈现页面的数据也是从后端获取的,基本上是通过Ajax获取的,因此分析Ajax请求并找到相应的数据请求也是可行的。此外,与页面样式相比,此界面不太可能更改。缺点是找到这个请求并模拟它是一个相对困难的过程,需要相对较多的分析经验
  比较这两种方法,我的观点是,对于一次性或小规模的需求,第一种方法可以节省时间和精力。然而,对于长期和大规模的需求,第二个将更可靠。对于一些站点,甚至是一些JS技术,目前,第一种方法基本上是万能的,第二种方法将非常复杂
  对于第一种方法,webmagic selenium就是这样一种尝试。它定义了一个downloader,在下载页面时使用浏览器内核进行渲染。Selenium的配置很复杂,取决于平台和版本。没有稳定的计划。如果您感兴趣,可以查看我的博客:使用selenium抓取动态加载的页面
  这里主要介绍第二种方法。我希望您会发现解析前端呈现页面并没有那么复杂。这里我们以安格拉斯华人社区为例
  如何判断前端渲染
  判断页面是否以JS呈现的方法相对简单。在浏览器中直接查看源代码(windows中为Ctrl+u,MAC中为Command+Alt+u)。如果找不到有效的信息,基本上肯定会在JS中呈现
  
  
  在本例中,如果在源代码中找不到页面中的标题“优孚计算机网络-前端攻城师”,则可以断定是JS渲染,数据是通过Ajax获取的
  分析请求
  让我们转到最难的部分:查找数据请求。此步骤可以帮助我们的工具,主要是用于在浏览器中查看网络请求的开发人员工具
  以chome为例。让我们打开“开发者工具”(windows上的F12和MAC上的Command+Alt+I),然后再次刷新页面(它也可能是一个下拉页面,简而言之,所有您认为可能触发新数据的操作),然后记住保留场景并逐个分析请求
  这一步需要一点耐心,但并非没有规则可循。首先可以帮助我们的是上面的分类过滤器(所有、文档等)。如果是普通的Ajax,它将显示在XHR标记下,jsonp请求将显示在scripts标记下。这是两种常见的数据类型
  然后你可以根据数据的大小来判断。通常,结果的大小越大,越有可能是返回数据的接口。其余取决于经验。例如,这里的“最新的?P=1&s=20”乍一看是可疑的
  
  对于可疑地址,您可以查看响应主体是什么。我们无法在开发人员工具中清楚地看到它。我们将URL复制到地址栏并再次请求它(如果您安装了chrome推荐的JSON查看器,则可以方便地查看Ajax结果)。看看结果,我们似乎找到了我们想要的
  
  同样,我们转到“发布详细信息”页面,找到了对特定内容的请求:
  程序设计
  如果您回忆一下前面的列表+目标页面示例,您会发现我们这次的需求与之前的需求类似,但是它们被Ajax-Ajax列表、Ajax数据所取代,返回的数据变成JSON。然后,我们仍然可以使用最后一种方法在两页中编写:
  数据表
  在这个列表页面中,我们需要找到有效的信息来帮助我们构建目标Ajax的URL。在这里,我们看到这个ID应该是我们想要的帖子的ID,而帖子详细信息请求由一些固定URL加上这个ID组成。因此,在这一步中,我们手动构造URL并将其添加到要获取的队列中。这里,我们使用选择语言jsonpath来选择数据(webmatic扩展包中提供了jsonpathselector来支持它)
   if (page.getUrl().regex(LIST_URL).match()) {
//这里我们使用JSONPATH这种选择语言来选择数据
List ids = new JsonPathSelector("$.data[*]._id").selectList(page.getRawText());
if (CollectionUtils.isNotEmpty(ids)) {
for (String id : ids) {
page.addTargetRequest("http://angularjs.cn/api/article/"+id);
}
}
}
  目标数据
  使用URL,解析目标数据实际上非常简单。因为JSON数据是完全结构化的,所以我们节省了分析页面和编写XPath的过程。这里我们仍然使用jsonpath来获取标题和内容
   page.putField("title", new JsonPathSelector("$.data.title").select(page.getRawText()));
page.putField("content", new JsonPathSelector("$.data.content").select(page.getRawText()));
  有关此示例的完整代码,请参见angularjsprocessor。爪哇
  总结
  在本例中,我们分析了一个经典的动态页面爬行过程。事实上,动态页面抓取的最大区别在于它增加了链接发现的难度。让我们比较两种开发模式:
  后端呈现页面
  下载辅助页面=>发现链接=>下载并分析目标HTML
  前端呈现页面
  找到的辅助数据=>构造链接=>下载并分析目标Ajax
  对于不同的站点,这些辅助数据可能在HTML页面中预输出,可能通过Ajax请求,甚至是一个多数据请求的过程,但这种模式基本上是固定的
  但是,这些数据请求的分析仍然比页面分析复杂得多,因此这实际上是动态页面捕获的难点
  本示例的目的是提供一种模式,在分析请求后,可以遵循该模式准备此类爬虫程序,即查找辅助数据=>构造链接=>下载并分析目标Ajax模式
  附言:
  WebMagic0.5.0之后,JSON的支持将添加到链API中。将来,您可以使用:
  page.getJson().jsonPath("$.name").get();
  这种方法可以解析Ajax请求
  它还支持
  page.getJson().removePadding("callback").jsonPath("$.name").get();
  这是解析jsonp请求的方法

ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)

网站优化优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2021-09-20 21:26 • 来自相关话题

  ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
  有时,当我们抓取收录请求的页面时,结果可能与在浏览器中看到的结果不同:正常显示的页面数据可以在浏览器中看到,但通过请求获得的结果却不一样。这是因为请求获取原创HTML文档,而浏览器中的页面是在JavaScript处理数据后生成的。这些数据来自各种来源,可以通过Ajax加载,收录在HTML文档中,也可以通过JavaScript和特定算法计算
  对于第一种情况,数据加载是一种异步加载方法。最初,原创页面将不收录某些数据。加载原创页面后,它将从服务器请求一个接口以获取数据,然后数据将被处理并显示到web页面。实际上,它正在发送一个Ajax请求
  根据网络发展的趋势,这种形式的网页越来越多。网页的原创HTML文档不收录任何数据。数据通过Ajax统一加载,然后呈现。这样,在web开发中,前端和后端可以分开,服务器直接呈现页面所带来的压力也可以减少
  因此,如果您遇到这样的页面,您无法通过直接使用请求和其他库获取原创页面来获得有效的数据。此时,您需要分析web页面后台发送到接口的Ajax请求。如果可以使用请求来模拟Ajax请求,就可以成功地捕获它们
  因此,本章的主要目的是了解什么是AJAX以及如何分析和获取AJAX请求
  Ajax完全称为异步JavaScript和XML,是异步JavaScript和XML。它不是一种编程语言,而是一种使用JavaScript与服务器交换数据并更新某些网页而不刷新页面和更改页面链接的技术
  对于传统web页面,如果要更新其内容,必须刷新整个页面,但使用Ajax,可以更新其内容,而无需刷新所有页面。在此过程中,页面实际上在后台与服务器交互。获取数据后,使用JavaScript更改网页,以便更新网页内容
  您可以在w3school上体验几个示例:
  1.实例介绍
  浏览网页时,我们会发现许多网页有更多的选择。例如,以微博为例:/U/283067847。。。切换到微博页面,继续下降。可以发现,在几条微博倒下之后,不会有进一步的下跌。相反,将显示加载的动画。一段时间后,新的微博内容将继续出现在底部。这个过程实际上就是Ajax加载的过程,如图6-1所示
  图6-1页面加载过程
  我们注意到页面没有刷新,这意味着页面的链接没有改变,但是页面中有更多的新内容,也就是说,新微博后来被刷掉了。这是获取新数据并通过Ajax进行渲染的过程
  2.基本原理
  在初步了解Ajax之后,让我们进一步了解它的基本原理。向网页更新发送Ajax请求的过程可以简单地分为以下三个步骤:
  (1)send-request;(2)parse-content;(3)render-web-page)
  让我们详细介绍这些过程
  发送请求
  我们知道JavaScript可以实现页面的各种交互功能,AJAX也不例外,它也是通过JavaScript实现的,实际上执行了以下代码:
  1234567891011121314var xmlhttp;if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();} else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }}xmlhttp.open("POST","/ajax/",true);xmlhttp.send();复制代码
  这是JavaScript对最低级别Ajax的实现。事实上,它是一个新的XMLHttpRequest对象,然后调用onreadystatechange属性来设置监视器,然后调用open()和send()方法来链接(即服务器)。请求被发送。在Python中发送请求后,您可以得到响应结果,但这里请求是用JavaScript发送的。由于设置了侦听,所以当服务器返回响应时,会触发相应的onreadystatechange方法,然后在此方法中解析响应内容
  解析内容
  收到响应后,将触发onreadystatechange属性对应的方法。此时,可以使用xmlhttp的responseText属性获取响应内容。这类似于使用Python中的请求向服务器发送请求并获取响应的过程。然后返回的content可以是HTML或JSON。接下来,您只需要在方法中使用JavaScript进行进一步处理,例如,如果是JSON,则可以对其进行解析和转换
  呈现网页
  JavaScript能够更改网页的内容。解析响应内容后,您可以调用JavaScript根据解析的内容处理网页。例如,通过document.Getelementbyid().innerHTML可以更改元素中的源代码,使网页上显示的内容发生更改。此操作也称为DOM操作,即可以对文档网页文档进行更改、删除等操作
  在上面的示例中,document.Getelementbyid(“mydiv”).InnerHTML=xmlhttp.responsetext将ID为mydiv的节点内的HTML代码更改为服务器返回的内容,这样服务器返回的新数据将显示在mydiv元素内,并且网页的某些内容将被更新
  我们观察到这三个步骤实际上是由JavaScript完成的,JavaScript完成了请求、解析和呈现的整个过程
  回想一下微博的下拉刷新。事实上,JavaScript向服务器发送一个Ajax请求,然后获取新的微博数据,对其进行解析,并将其呈现在网页中
  因此,我们知道真正的数据实际上是通过Ajax请求获得的。如果您想捕获这些数据,您需要知道这些请求是如何发送的,发送到哪里,以及发送了哪些参数。如果我们知道这些,我们可以用Python模拟发送操作以获得结果吗
  在下一节中,我们将学习在哪里可以看到这些背景Ajax操作,它们是如何发送的,以及发送了哪些参数
  本资源来源于崔庆才的个人博客《精米:Python 3网络爬虫开发实用教程》|精米 查看全部

  ajax抓取网页内容(照Web发展的趋势分析与趋势的发展趋势)
  有时,当我们抓取收录请求的页面时,结果可能与在浏览器中看到的结果不同:正常显示的页面数据可以在浏览器中看到,但通过请求获得的结果却不一样。这是因为请求获取原创HTML文档,而浏览器中的页面是在JavaScript处理数据后生成的。这些数据来自各种来源,可以通过Ajax加载,收录在HTML文档中,也可以通过JavaScript和特定算法计算
  对于第一种情况,数据加载是一种异步加载方法。最初,原创页面将不收录某些数据。加载原创页面后,它将从服务器请求一个接口以获取数据,然后数据将被处理并显示到web页面。实际上,它正在发送一个Ajax请求
  根据网络发展的趋势,这种形式的网页越来越多。网页的原创HTML文档不收录任何数据。数据通过Ajax统一加载,然后呈现。这样,在web开发中,前端和后端可以分开,服务器直接呈现页面所带来的压力也可以减少
  因此,如果您遇到这样的页面,您无法通过直接使用请求和其他库获取原创页面来获得有效的数据。此时,您需要分析web页面后台发送到接口的Ajax请求。如果可以使用请求来模拟Ajax请求,就可以成功地捕获它们
  因此,本章的主要目的是了解什么是AJAX以及如何分析和获取AJAX请求
  Ajax完全称为异步JavaScript和XML,是异步JavaScript和XML。它不是一种编程语言,而是一种使用JavaScript与服务器交换数据并更新某些网页而不刷新页面和更改页面链接的技术
  对于传统web页面,如果要更新其内容,必须刷新整个页面,但使用Ajax,可以更新其内容,而无需刷新所有页面。在此过程中,页面实际上在后台与服务器交互。获取数据后,使用JavaScript更改网页,以便更新网页内容
  您可以在w3school上体验几个示例:
  1.实例介绍
  浏览网页时,我们会发现许多网页有更多的选择。例如,以微博为例:/U/283067847。。。切换到微博页面,继续下降。可以发现,在几条微博倒下之后,不会有进一步的下跌。相反,将显示加载的动画。一段时间后,新的微博内容将继续出现在底部。这个过程实际上就是Ajax加载的过程,如图6-1所示
  图6-1页面加载过程
  我们注意到页面没有刷新,这意味着页面的链接没有改变,但是页面中有更多的新内容,也就是说,新微博后来被刷掉了。这是获取新数据并通过Ajax进行渲染的过程
  2.基本原理
  在初步了解Ajax之后,让我们进一步了解它的基本原理。向网页更新发送Ajax请求的过程可以简单地分为以下三个步骤:
  (1)send-request;(2)parse-content;(3)render-web-page)
  让我们详细介绍这些过程
  发送请求
  我们知道JavaScript可以实现页面的各种交互功能,AJAX也不例外,它也是通过JavaScript实现的,实际上执行了以下代码:
  1234567891011121314var xmlhttp;if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest();} else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }}xmlhttp.open("POST","/ajax/",true);xmlhttp.send();复制代码
  这是JavaScript对最低级别Ajax的实现。事实上,它是一个新的XMLHttpRequest对象,然后调用onreadystatechange属性来设置监视器,然后调用open()和send()方法来链接(即服务器)。请求被发送。在Python中发送请求后,您可以得到响应结果,但这里请求是用JavaScript发送的。由于设置了侦听,所以当服务器返回响应时,会触发相应的onreadystatechange方法,然后在此方法中解析响应内容
  解析内容
  收到响应后,将触发onreadystatechange属性对应的方法。此时,可以使用xmlhttp的responseText属性获取响应内容。这类似于使用Python中的请求向服务器发送请求并获取响应的过程。然后返回的content可以是HTML或JSON。接下来,您只需要在方法中使用JavaScript进行进一步处理,例如,如果是JSON,则可以对其进行解析和转换
  呈现网页
  JavaScript能够更改网页的内容。解析响应内容后,您可以调用JavaScript根据解析的内容处理网页。例如,通过document.Getelementbyid().innerHTML可以更改元素中的源代码,使网页上显示的内容发生更改。此操作也称为DOM操作,即可以对文档网页文档进行更改、删除等操作
  在上面的示例中,document.Getelementbyid(“mydiv”).InnerHTML=xmlhttp.responsetext将ID为mydiv的节点内的HTML代码更改为服务器返回的内容,这样服务器返回的新数据将显示在mydiv元素内,并且网页的某些内容将被更新
  我们观察到这三个步骤实际上是由JavaScript完成的,JavaScript完成了请求、解析和呈现的整个过程
  回想一下微博的下拉刷新。事实上,JavaScript向服务器发送一个Ajax请求,然后获取新的微博数据,对其进行解析,并将其呈现在网页中
  因此,我们知道真正的数据实际上是通过Ajax请求获得的。如果您想捕获这些数据,您需要知道这些请求是如何发送的,发送到哪里,以及发送了哪些参数。如果我们知道这些,我们可以用Python模拟发送操作以获得结果吗
  在下一节中,我们将学习在哪里可以看到这些背景Ajax操作,它们是如何发送的,以及发送了哪些参数
  本资源来源于崔庆才的个人博客《精米:Python 3网络爬虫开发实用教程》|精米

ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2021-09-20 21:20 • 来自相关话题

  ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))
  当前web页面的相当一部分使用ajax技术。无论在c#中使用webclient还是httprequest,都无法获得正确的结果,因为这些脚本是在服务器发送它们之后执行的
  然而,我们使用ie浏览页面是正常的,所以只有一个解决方案是使用WebBrowser控件
  但是使用WebBrowser,您会发现在downloadcomplete事件中,您根本无法知道页面何时真正加载
  当然,带有框架的单个网页可能会多次触发complete。即使在导航事件中使用counter方法,即++,在downloadcomplete中使用do-,在JS完成后仍然无法获得结果。起初我觉得很奇怪,直到GG来到Ajax文章,明白了原因
  最终的解决方案是使用WebBrowser+定时器来解决抓取页面的问题
  关键仍然是页面状态,我们可以使用它webBrowser1.Statustext,如果返回“complete”,则表示页面已加载
  示例代码如下所示:
  private void timer1_Tick(object sender, EventArgs e)
{

textBox1.Text += webBrowser1.StatusText;
if (webBrowser1.StatusText == "完成")
{

timer1.Enabled = false;
//页面加载完成,做一些其它的事
textBox1.Text += webBrowser1.Document.Body.OuterHtml;
//webBrowser1.DocumentText 注意不要用这个,这个和查看源文件一样的
}
}
private void Form1_Load(object sender, EventArgs e)
{
string Url = "http://cd.mei8.cn/face/work/wi ... 3B%3B
webBrowser1.Navigate(Url);
}
  放置三个控件。将WebBrowser、计时器和文本框计时器设置为可用 查看全部

  ajax抓取网页内容(IE浏览页面何时才算是真正的加载完毕?(图))
  当前web页面的相当一部分使用ajax技术。无论在c#中使用webclient还是httprequest,都无法获得正确的结果,因为这些脚本是在服务器发送它们之后执行的
  然而,我们使用ie浏览页面是正常的,所以只有一个解决方案是使用WebBrowser控件
  但是使用WebBrowser,您会发现在downloadcomplete事件中,您根本无法知道页面何时真正加载
  当然,带有框架的单个网页可能会多次触发complete。即使在导航事件中使用counter方法,即++,在downloadcomplete中使用do-,在JS完成后仍然无法获得结果。起初我觉得很奇怪,直到GG来到Ajax文章,明白了原因
  最终的解决方案是使用WebBrowser+定时器来解决抓取页面的问题
  关键仍然是页面状态,我们可以使用它webBrowser1.Statustext,如果返回“complete”,则表示页面已加载
  示例代码如下所示:
  private void timer1_Tick(object sender, EventArgs e)
{

textBox1.Text += webBrowser1.StatusText;
if (webBrowser1.StatusText == "完成")
{

timer1.Enabled = false;
//页面加载完成,做一些其它的事
textBox1.Text += webBrowser1.Document.Body.OuterHtml;
//webBrowser1.DocumentText 注意不要用这个,这个和查看源文件一样的
}
}
private void Form1_Load(object sender, EventArgs e)
{
string Url = "http://cd.mei8.cn/face/work/wi ... 3B%3B
webBrowser1.Navigate(Url);
}
  放置三个控件。将WebBrowser、计时器和文本框计时器设置为可用

ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)

网站优化优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2021-09-18 02:22 • 来自相关话题

  ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)
  越来越多的网站,开始采用“单页应用”
  网站只有一个网页,它使用Ajax技术根据用户的输入加载不同的内容
  这种方法的优点是良好的用户体验和节省流量。缺点是搜索引擎无法捕获Ajax内容。例如,您有一个网站
  用户可以通过英镑符号结构的URL看到不同的内容
  #一,
  #二,
  #三,
  然而,搜索引擎只抓取并忽略了磅号,所以它不能索引内容
  为了解决这个问题,谷歌提出了“井号+感叹号”的结构
  #!!一,
  当Google找到上述URL时,它将自动获取另一个URL:
  只要你把Ajax内容放在这个网站上,谷歌就会收录. 但问题是,“磅号+感叹号”非常难看和麻烦。推特过去采用这种结构
  改为
  #!/鲁安夫
  结果,用户一再抱怨,仅在半年内就取消了
  那么,有没有办法让搜索引擎在保持更直观的URL的同时抓取Ajax内容呢
  直到两天前我看到了话语权创始人之一的解决方案,我一直认为我做不到这一点
  Distance是一个严重依赖Ajax的论坛程序,但它必须如此Google收录Content。解决方案是放弃井号结构,采用历史API
  所谓的历史API是指在不刷新页面的情况下更改浏览器地址栏中显示的URL(确切地说,更改网页的当前状态)。这里有一个例子。单击上面的按钮开始播放音乐。然后,单击下面的链接,地址栏中的URL将更改,但音乐播放不会中断
  历史API的详细介绍超出了本文的范围文章. 简单地说,它的功能是在浏览器的历史对象中添加一条记录
  window.history.pushState(状态对象、标题、url)
  上面的命令可以在地址栏中显示新的URL。历史对象的pushstate方法接受三个参数。新URL是第三个参数。前两个参数可以为null
  window.history.pushState(null,null,newURL)
  目前,主要浏览器都支持这种方法:chrome(26.0+,Firefox(20.0+,即(10.0+,Safari(5.1+),歌剧(12.1+
  这是罗宾·沃德的方法
  首先,用history API替换磅号结构,使每个磅号成为正常路径的URL,这样搜索引擎将抓取每个网页
  /一,
  /二,
  /三,
  然后,定义一个JavaScript函数来处理Ajax部分,并根据web地址获取内容(假设jQuery)
  功能锚定点击(链接){
  var linkSplit=link.split('/').pop()
  $.get('api/'+linkSplit,函数(数据){
  $('#content').html(数据)
  }))
  }
  然后定义鼠标的单击事件
  $('#container')。在('click','a',函数(e)上{
  window.history.pushState(null,null,$(this.attr('href'))
  anchorClick($(this.attr('href'))
  e、 预防默认值()
  }))
  还考虑用户点击浏览器的“向前/向后”按钮。将触发历史对象的pop状态事件
  window.addEventListener('popstate',函数(e){
  anchorClick(location.pathname)
  }))
  在定义了上述三部分代码之后,您可以在不刷新页面的情况下显示普通路径URL和Ajax内容
  最后,设置服务器端
  因为没有使用磅符号结构,所以每个URL都是不同的请求。因此,服务器需要为所有这些请求返回以下网页,以防止404错误
  如果仔细查看上面的代码,您会发现有一个noscript标记,这是一个秘密
  我们将希望搜索引擎收录使用的所有内容放在noscript标记中。这样,用户仍然可以在不刷新页面的情况下执行Ajax操作,但搜索引擎将收录每个网页的主要内容 查看全部

  ajax抓取网页内容(越来越多的网站采用Ajax技术解决方法放弃井号结构)
  越来越多的网站,开始采用“单页应用”
  网站只有一个网页,它使用Ajax技术根据用户的输入加载不同的内容
  这种方法的优点是良好的用户体验和节省流量。缺点是搜索引擎无法捕获Ajax内容。例如,您有一个网站
  用户可以通过英镑符号结构的URL看到不同的内容
  #一,
  #二,
  #三,
  然而,搜索引擎只抓取并忽略了磅号,所以它不能索引内容
  为了解决这个问题,谷歌提出了“井号+感叹号”的结构
  #!!一,
  当Google找到上述URL时,它将自动获取另一个URL:
  只要你把Ajax内容放在这个网站上,谷歌就会收录. 但问题是,“磅号+感叹号”非常难看和麻烦。推特过去采用这种结构
  改为
  #!/鲁安夫
  结果,用户一再抱怨,仅在半年内就取消了
  那么,有没有办法让搜索引擎在保持更直观的URL的同时抓取Ajax内容呢
  直到两天前我看到了话语权创始人之一的解决方案,我一直认为我做不到这一点
  Distance是一个严重依赖Ajax的论坛程序,但它必须如此Google收录Content。解决方案是放弃井号结构,采用历史API
  所谓的历史API是指在不刷新页面的情况下更改浏览器地址栏中显示的URL(确切地说,更改网页的当前状态)。这里有一个例子。单击上面的按钮开始播放音乐。然后,单击下面的链接,地址栏中的URL将更改,但音乐播放不会中断
  历史API的详细介绍超出了本文的范围文章. 简单地说,它的功能是在浏览器的历史对象中添加一条记录
  window.history.pushState(状态对象、标题、url)
  上面的命令可以在地址栏中显示新的URL。历史对象的pushstate方法接受三个参数。新URL是第三个参数。前两个参数可以为null
  window.history.pushState(null,null,newURL)
  目前,主要浏览器都支持这种方法:chrome(26.0+,Firefox(20.0+,即(10.0+,Safari(5.1+),歌剧(12.1+
  这是罗宾·沃德的方法
  首先,用history API替换磅号结构,使每个磅号成为正常路径的URL,这样搜索引擎将抓取每个网页
  /一,
  /二,
  /三,
  然后,定义一个JavaScript函数来处理Ajax部分,并根据web地址获取内容(假设jQuery)
  功能锚定点击(链接){
  var linkSplit=link.split('/').pop()
  $.get('api/'+linkSplit,函数(数据){
  $('#content').html(数据)
  }))
  }
  然后定义鼠标的单击事件
  $('#container')。在('click','a',函数(e)上{
  window.history.pushState(null,null,$(this.attr('href'))
  anchorClick($(this.attr('href'))
  e、 预防默认值()
  }))
  还考虑用户点击浏览器的“向前/向后”按钮。将触发历史对象的pop状态事件
  window.addEventListener('popstate',函数(e){
  anchorClick(location.pathname)
  }))
  在定义了上述三部分代码之后,您可以在不刷新页面的情况下显示普通路径URL和Ajax内容
  最后,设置服务器端
  因为没有使用磅符号结构,所以每个URL都是不同的请求。因此,服务器需要为所有这些请求返回以下网页,以防止404错误
  如果仔细查看上面的代码,您会发现有一个noscript标记,这是一个秘密
  我们将希望搜索引擎收录使用的所有内容放在noscript标记中。这样,用户仍然可以在不刷新页面的情况下执行Ajax操作,但搜索引擎将收录每个网页的主要内容

ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-09-17 02:00 • 来自相关话题

  ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)
  ajax抓取网页内容有很多技巧和策略,里面包含了各种应用、各种算法,以及它们之间的互相配合,是一个系统性的研究内容。本文主要介绍如何封装异步http请求等功能。一、分析代码分析http请求大家都很熟悉,通过一个请求格式,就可以判断出这是一个传递数据的请求。但是这里涉及的包含多种方法的request和response格式会相对更复杂。
  因此需要封装一个简单的请求格式来作为封装。(也就是用json封装一个请求格式),详细分析如下。#封装canvasform文件与json结构canvas的form文件非常特殊,它只包含三个文件:attribute标签、object标签、settings配置,用json封装它会包含:attribute和object如何封装?举个栗子:#封装canvasform#封装canvasformxml结构>loadimageelement(attribute,object)value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformjson格式>canvas(attribute,object)size=1600*3000canvas:[{value:"data",canvas:[{attr:canvas.width,attr:canvas.height},{attr:canvas.blend,attr:canvas.gray},{attr:canvas.grayscale,attr:canvas.blend},{attr:canvas.width,attr:canvas.height},{attr:canvas.random,attr:canvas.random}]}element封装格式是放在canvas的object标签里,我们给它分配一个标签名为form,用于添加object标签,实现一个分析页面内容的封装请求。
  二、json封装相对封装,json封装更容易理解,但是有时候为了兼容性,使用json封装会会更加方便。json封装的大体思路是:预处理所有字符,然后生成一个纯字符串,最后通过一个domnode去遍历字符串来封装,最后返回一个字符串。#封装canvasform#封装canvasformjson结构canvas(attribute,object)size=1600*3000,value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformxml结构>canvas(attribute,object)objectxmltype:object(xmltype)path:file=content=source=text:jsondecode:doctype=object"""{xml:text}""">生成一个纯字符串,封装同上实现.#封装。 查看全部

  ajax抓取网页内容(如何封装异步http请求等功能-ajax抓取网页内容分析)
  ajax抓取网页内容有很多技巧和策略,里面包含了各种应用、各种算法,以及它们之间的互相配合,是一个系统性的研究内容。本文主要介绍如何封装异步http请求等功能。一、分析代码分析http请求大家都很熟悉,通过一个请求格式,就可以判断出这是一个传递数据的请求。但是这里涉及的包含多种方法的request和response格式会相对更复杂。
  因此需要封装一个简单的请求格式来作为封装。(也就是用json封装一个请求格式),详细分析如下。#封装canvasform文件与json结构canvas的form文件非常特殊,它只包含三个文件:attribute标签、object标签、settings配置,用json封装它会包含:attribute和object如何封装?举个栗子:#封装canvasform#封装canvasformxml结构>loadimageelement(attribute,object)value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformjson格式>canvas(attribute,object)size=1600*3000canvas:[{value:"data",canvas:[{attr:canvas.width,attr:canvas.height},{attr:canvas.blend,attr:canvas.gray},{attr:canvas.grayscale,attr:canvas.blend},{attr:canvas.width,attr:canvas.height},{attr:canvas.random,attr:canvas.random}]}element封装格式是放在canvas的object标签里,我们给它分配一个标签名为form,用于添加object标签,实现一个分析页面内容的封装请求。
  二、json封装相对封装,json封装更容易理解,但是有时候为了兼容性,使用json封装会会更加方便。json封装的大体思路是:预处理所有字符,然后生成一个纯字符串,最后通过一个domnode去遍历字符串来封装,最后返回一个字符串。#封装canvasform#封装canvasformjson结构canvas(attribute,object)size=1600*3000,value={x:"url",x:"size",attr:"refs",canvas:[{attr:string,value:"0.6"},{attr:string,value:"0.7"},{attr:string,value:"0.8"}]}#封装canvasformxml结构>canvas(attribute,object)objectxmltype:object(xmltype)path:file=content=source=text:jsondecode:doctype=object"""{xml:text}""">生成一个纯字符串,封装同上实现.#封装。

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2021-09-16 14:11 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  一,。导言
  在PythonWebCrawler内容提取器文章中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器工艺路线过程中的程序设计实验。这是第二部分。在第一部分中,实验使用XSLT一次性提取静态网页内容并将其转换为XML格式。这就留下了一个问题:如何提取JavaScript管理的动态内容?然后本文回答了这个问题
  二,。用于提取动态内容的技术组件
  在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax动态内容在源代码中找不到,因此有必要找到适当的库来加载异步或动态加载的内容,并将其交给项目的提取器进行提取
  Python可以使用selenium执行JavaScript,selenium可以让浏览器自动加载页面并获取所需数据。Selenium没有浏览器。它可以使用第三方浏览器(如Firefox和chrome)或无头浏览器(如phantom JS)在后台执行
  三,。源代码和实验过程
  如果我们想抓取京东手机页面的手机名称和价格(在网络源代码中找不到价格),如下图所示:
  
  步骤1:使用jisou customer search的可视化注释功能,可以以非常快的速度自动生成已调试的捕获规则。事实上,它是一个标准的XSLT程序。如下图所示,将生成的XSLT程序复制到以下程序。注:本文仅记录实验过程。在实际系统中,XSLT程序将以多种方式注入到内容提取器中
  
  步骤2:执行以下代码(在Windows 10中,python3.2.测试通过了。有关源代码的下载地址,请参考文章末尾的GitHub。请注意XSLT是一个相对较长的字符串。如果删除此字符串,则只有几行代码,这足以显示Python的强大功能
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  步骤3:您可以看到网页中的手机名称和价格已被正确捕获
  
  4.下一读
  到目前为止,通过两个文章演示如何捕获静态和动态网页内容,我们使用XSLT一次性从网页中提取所需内容。事实上,XSLT是一种相对复杂的编程语言。如果手动编写XSLT,也可以将其编写为离散XPath。如果XSLT不是手动编写的,但是由程序自动生成是有意义的。程序员不应该再花时间编写和调整捕获规则,这是一项耗时费力的工作。下一篇文章“1分钟快速生成用于网页内容提取的XSLT”将介绍如何生成XSLT
  5.jiscokegooseker开源代码下载源码
  1.GooSeeker开源Python web爬虫GitHub源代码
  6.文件修改历史记录
  2016-05-26:V2.0,补充文字说明
  2016-05-29:V2.1.添加第5章:下载源代码,更改GitHub source网站 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  一,。导言
  在PythonWebCrawler内容提取器文章中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器工艺路线过程中的程序设计实验。这是第二部分。在第一部分中,实验使用XSLT一次性提取静态网页内容并将其转换为XML格式。这就留下了一个问题:如何提取JavaScript管理的动态内容?然后本文回答了这个问题
  二,。用于提取动态内容的技术组件
  在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,有些Ajax动态内容在源代码中找不到,因此有必要找到适当的库来加载异步或动态加载的内容,并将其交给项目的提取器进行提取
  Python可以使用selenium执行JavaScript,selenium可以让浏览器自动加载页面并获取所需数据。Selenium没有浏览器。它可以使用第三方浏览器(如Firefox和chrome)或无头浏览器(如phantom JS)在后台执行
  三,。源代码和实验过程
  如果我们想抓取京东手机页面的手机名称和价格(在网络源代码中找不到价格),如下图所示:
  
  步骤1:使用jisou customer search的可视化注释功能,可以以非常快的速度自动生成已调试的捕获规则。事实上,它是一个标准的XSLT程序。如下图所示,将生成的XSLT程序复制到以下程序。注:本文仅记录实验过程。在实际系统中,XSLT程序将以多种方式注入到内容提取器中
  
  步骤2:执行以下代码(在Windows 10中,python3.2.测试通过了。有关源代码的下载地址,请参考文章末尾的GitHub。请注意XSLT是一个相对较长的字符串。如果删除此字符串,则只有几行代码,这足以显示Python的强大功能
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  步骤3:您可以看到网页中的手机名称和价格已被正确捕获
  
  4.下一读
  到目前为止,通过两个文章演示如何捕获静态和动态网页内容,我们使用XSLT一次性从网页中提取所需内容。事实上,XSLT是一种相对复杂的编程语言。如果手动编写XSLT,也可以将其编写为离散XPath。如果XSLT不是手动编写的,但是由程序自动生成是有意义的。程序员不应该再花时间编写和调整捕获规则,这是一项耗时费力的工作。下一篇文章“1分钟快速生成用于网页内容提取的XSLT”将介绍如何生成XSLT
  5.jiscokegooseker开源代码下载源码
  1.GooSeeker开源Python web爬虫GitHub源代码
  6.文件修改历史记录
  2016-05-26:V2.0,补充文字说明
  2016-05-29:V2.1.添加第5章:下载源代码,更改GitHub source网站

ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)

网站优化优采云 发表了文章 • 0 个评论 • 95 次浏览 • 2021-09-16 04:17 • 来自相关话题

  ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)
  ---恢复内容启动---
  以下是如何获取以Ajax形式加载的网页数据的记录:
  目标:获取“%E5%89%A7%E6%83%85&type=11&interval\u id=100:90&action=“”下的网页数据
  步骤1:网页数据分析——特性:当列表栏滚动到页面底部时,数据自动加载,页面的URL不变
  步骤2:使用Fiddler捕捉数据包,如下图所示:
  图1:请求数据
  
  图2:表格
  
  数据规则是通过捕获数据包得到的:图2的from表单中对应的start数据和图1的URL中对应的start数据随着每次加载而增加,其他数据不变,根据这个规律,我们可以构造相应的请求来获取数据
  注意,数据形式是JSON
  代码如下:
  1).urllib形式
  import urllib2
import urllib
#此处的url为上述抓包获取的url去掉start以及limit,start以及limit数据后边以form表单的形式传入
url = ' https://movie.douban.com/j/cha ... 39%3B
#请求投信息,伪造成浏览器,方式被反爬虫策略拦截
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
#构建form表单
formdata = {
"start":"20",
"limit":"20"
}
#urlencode()urllib中的函数,作用:将key:value形式的键值对转换为"key=value"形式的字符串
data = urllib.urlencode(formdata)
#构建request实例对象
request = urllib2.Request(url,data=data,headers=headers)
#发送请求并返回响应信息
response = urllib2.urlopen(request)
#注意此处的数据形式并不是html文档,而是json数据
json = response.read()
print html
  2).request获取库的请求代码
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
data = {
"start":"20",
"limit":"20",
}
response = requests.get(url,params = data,headers = headers)
print response.text
  3).request申请图书馆
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
formdata = {
"start":"20",
"limit":"20"
}
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
response = requests.post(url,data=formdata,headers=headers)
print response.text
  ---恢复期结束--- 查看全部

  ajax抓取网页内容(如何抓取ajax形式加载的网页数据(一)_恢复内容开始)
  ---恢复内容启动---
  以下是如何获取以Ajax形式加载的网页数据的记录:
  目标:获取“%E5%89%A7%E6%83%85&type=11&interval\u id=100:90&action=“”下的网页数据
  步骤1:网页数据分析——特性:当列表栏滚动到页面底部时,数据自动加载,页面的URL不变
  步骤2:使用Fiddler捕捉数据包,如下图所示:
  图1:请求数据
  
  图2:表格
  
  数据规则是通过捕获数据包得到的:图2的from表单中对应的start数据和图1的URL中对应的start数据随着每次加载而增加,其他数据不变,根据这个规律,我们可以构造相应的请求来获取数据
  注意,数据形式是JSON
  代码如下:
  1).urllib形式
  import urllib2
import urllib
#此处的url为上述抓包获取的url去掉start以及limit,start以及limit数据后边以form表单的形式传入
url = ' https://movie.douban.com/j/cha ... 39%3B
#请求投信息,伪造成浏览器,方式被反爬虫策略拦截
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
#构建form表单
formdata = {
"start":"20",
"limit":"20"
}
#urlencode()urllib中的函数,作用:将key:value形式的键值对转换为"key=value"形式的字符串
data = urllib.urlencode(formdata)
#构建request实例对象
request = urllib2.Request(url,data=data,headers=headers)
#发送请求并返回响应信息
response = urllib2.urlopen(request)
#注意此处的数据形式并不是html文档,而是json数据
json = response.read()
print html
  2).request获取库的请求代码
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
data = {
"start":"20",
"limit":"20",
}
response = requests.get(url,params = data,headers = headers)
print response.text
  3).request申请图书馆
  #coding=utf-8
import requests
url = ' https://movie.douban.com/j/cha ... 39%3B
formdata = {
"start":"20",
"limit":"20"
}
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"}
response = requests.post(url,data=formdata,headers=headers)
print response.text
  ---恢复期结束---

ajax抓取网页内容( 2017年12月13日具有很好的参考价值,希望对大家有所帮助)

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2021-09-16 04:11 • 来自相关话题

  ajax抓取网页内容(
2017年12月13日具有很好的参考价值,希望对大家有所帮助)
  Ajax跨域收购网站json数据实例
  更新时间:2017年12月13日09:21:07作者:第9云
  让我们分享一个Ajax跨域收购网站json实例数据具有很好的参考价值,希望对您有所帮助。让我们跟着小编看一看
  因为你公司的项目需要调用视频地址
  1:当它是链接时:直接在播放器数据库中查找地址
  2:当它是外部链接时:直接使用窗口。地点。Href('在数据库中搜索的地址')
  3:连接H5时:使用播放
  4:对于其他网站链接,请转到第三方网站读取JSON信息,然后将JSON数据作为URL放在播放器中
  当它为4时,当我使用JSON时会出现格式错误
  当使用jsonp解决跨域问题时,无法接收返回格式
  所以我用
  
public static String analysisUrl(String url){
HttpURLConnection httpConnection = null;
String output = "";
try {
URL targetUrl = new URL(url);
httpConnection = (HttpURLConnection) targetUrl.openConnection();
httpConnection.setDoOutput(true);
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Content-Type",
"application/json");
InputStreamReader isr = new InputStreamReader(httpConnection
.getInputStream(),"utf-8");
BufferedReader responseBuffer = new BufferedReader(isr);
output = responseBuffer.readLine();

} catch (Exception e) {

} finally {
httpConnection.disconnect();
}
return output;
}
  传递一个URL。此方法将读取网站并返回它
  所以我使用ajax在前台将URL传递给这个方法,返回类型是JSON
  使用数据。结果。获取URL中JSON数据的数据名称
  上述Ajax跨域收购网站json数据示例是小编共享的所有内容。我希望它能给你一个参考和支持脚本的房子 查看全部

  ajax抓取网页内容(
2017年12月13日具有很好的参考价值,希望对大家有所帮助)
  Ajax跨域收购网站json数据实例
  更新时间:2017年12月13日09:21:07作者:第9云
  让我们分享一个Ajax跨域收购网站json实例数据具有很好的参考价值,希望对您有所帮助。让我们跟着小编看一看
  因为你公司的项目需要调用视频地址
  1:当它是链接时:直接在播放器数据库中查找地址
  2:当它是外部链接时:直接使用窗口。地点。Href('在数据库中搜索的地址')
  3:连接H5时:使用播放
  4:对于其他网站链接,请转到第三方网站读取JSON信息,然后将JSON数据作为URL放在播放器中
  当它为4时,当我使用JSON时会出现格式错误
  当使用jsonp解决跨域问题时,无法接收返回格式
  所以我用
  
public static String analysisUrl(String url){
HttpURLConnection httpConnection = null;
String output = "";
try {
URL targetUrl = new URL(url);
httpConnection = (HttpURLConnection) targetUrl.openConnection();
httpConnection.setDoOutput(true);
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Content-Type",
"application/json");
InputStreamReader isr = new InputStreamReader(httpConnection
.getInputStream(),"utf-8");
BufferedReader responseBuffer = new BufferedReader(isr);
output = responseBuffer.readLine();

} catch (Exception e) {

} finally {
httpConnection.disconnect();
}
return output;
}
  传递一个URL。此方法将读取网站并返回它
  所以我使用ajax在前台将URL传递给这个方法,返回类型是JSON
  使用数据。结果。获取URL中JSON数据的数据名称
  上述Ajax跨域收购网站json数据示例是小编共享的所有内容。我希望它能给你一个参考和支持脚本的房子

ajax抓取网页内容( 2019年X月中华人民共和国县以上反爬机制及处理方式)

网站优化优采云 发表了文章 • 0 个评论 • 59 次浏览 • 2021-09-16 04:09 • 来自相关话题

  ajax抓取网页内容(
2019年X月中华人民共和国县以上反爬机制及处理方式)
  Python抓取Ajax动态加载网页分析
  更新时间:2019年9月5日08:47:06作者:凌妮珊
  本文文章主要介绍Python抓取Ajax动态加载网页的过程。通过实例代码对其进行了详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考
  常见防爬机理及处理方法
  1、Headers反爬虫:cookie、referer、用户代理
  解决方案:通过F12获取标题并将其传递给请求。Get()方法
  2、IP限制:网站根据IP地址访问频率进行反向爬网,短时间访问IP
  解决方案:
  1、构建自己的IP代理池,每次访问时随机选择代理,并经常更新代理池
  2、购买开放代理或专用代理IP
  3、降低爬行速度
  3、User-代理限制:类似于IP限制
  解决方案:构建自己的用户代理池,并在每次访问时随机选择它
  5、authenticate查询参数或表单数据(salt、sign)
  解决方案:找到JS文件,分析JS处理方法,并使用Python以相同的方式进行处理
  6、处理响应内容
  解决方案:打印和查看响应内容,并使用XPath或正则表达式进行处理
  Python中标题和表单数据的常规处理
  1、pycharm输入方式:Ctrl+R,选择正则表达式
  2、处理标题和表单数据
  (**):(**)
  “1”:“1”:“2”
  3、单击“全部替换”
  民政部网站数据采集
  目的:获取最新的中华人民共和国县级以上行政区划代码
  URL:-民政数据-行政区划代码
  实施步骤
  1、从民政数据中提取最新的行政区划代码链接网站
  最新的一个在上面。命名格式:2019年x月中华人民共和国县级以上行政区划代码
  
import requests
from lxml import etree
import re

url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
html = requests.get(url, headers=headers).text
parse_html = etree.HTML(html)
article_list = parse_html.xpath('//a[@class="artitlelist"]')

for article in article_list:
title = article.xpath('./@title')[0]
# 正则匹配title中包含这个字符串的链接
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
two_link = 'http://www.mca.gov.cn' + article.xpath('./@href')[0]
print(two_link)
break
  2、从第二页链接中提取真实链接(反爬网响应,在网页内容中嵌入JS,并指向新的网页链接)
  向辅助页面链接发送请求以获取响应内容,并查看嵌入的JS代码
  真实二级页面链接的常规提取
  
# 爬取二级“假”链接
two_html = requests.get(two_link, headers=headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
new_two_link = re.findall(r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" ', two_html, re.S)[0]
  3、query是否已在数据库表中对此链接进行爬网,以建立增量爬网器
  在数据库中构建版本表以存储爬网链接
  每次执行程序时,检查版本表中的记录,查看它们是否已被爬网
  
cursor.execute('select * from version')
result = self.cursor.fetchall()
if result:
if result[-1][0] == two_link:
print('已是最新')
else:
# 有更新,开始抓取
# 将链接再重新插入version表记录
  4、代码实现
  
import requests
from lxml import etree
import re
import pymysql
class GovementSpider(object):
def __init__(self):
self.url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
self.headers = {'User-Agent': 'Mozilla/5.0'}
# 创建2个对象
self.db = pymysql.connect('127.0.0.1', 'root', '123456', 'govdb', charset='utf8')
self.cursor = self.db.cursor()
# 获取假链接
def get_false_link(self):
html = requests.get(url=self.url, headers=self.headers).text
# 此处隐藏了真实的二级页面的url链接,真实的在假的响应网页中,通过js脚本生成,
# 假的链接在网页中可以访问,但是爬取到的内容却不是我们想要的
parse_html = etree.HTML(html)
a_list = parse_html.xpath('//a[@class="artitlelist"]')
for a in a_list:
# get()方法:获取某个属性的值
title = a.get('title')
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
false_link = 'http://www.mca.gov.cn' + a.get('href')
print("二级“假”链接的网址为", false_link)
break
# 提取真链接
self.incr_spider(false_link)
# 增量爬取函数
def incr_spider(self, false_link):
self.cursor.execute('select url from version where url=%s', [false_link])
# fetchall: (('http://xxxx.html',),)
result = self.cursor.fetchall()
# not result:代表数据库version表中无数据
if not result:
self.get_true_link(false_link)
# 可选操作: 数据库version表中只保留最新1条数据
self.cursor.execute("delete from version")
# 把爬取后的url插入到version表中
self.cursor.execute('insert into version values(%s)', [false_link])
self.db.commit()
else:
print('数据已是最新,无须爬取')
# 获取真链接
def get_true_link(self, false_link):
# 先获取假链接的响应,然后根据响应获取真链接
html = requests.get(url=false_link, headers=self.headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
re_bds = r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" '
pattern = re.compile(re_bds, re.S)
true_link = pattern.findall(html)[0]
self.save_data(true_link) # 提取真链接的数据
# 用xpath直接提取数据
def save_data(self, true_link):
html = requests.get(url=true_link, headers=self.headers).text
# 基准xpath,提取每个信息的节点列表对象
parse_html = etree.HTML(html)
tr_list = parse_html.xpath('//tr[@height="19"]')
for tr in tr_list:
code = tr.xpath('./td[2]/text()')[0].strip() # 行政区划代码
name = tr.xpath('./td[3]/text()')[0].strip() # 单位名称
print(name, code)
# 主函数
def main(self):
self.get_false_link()
if __name__ == '__main__':
spider = GovementSpider()
spider.main()
  动态加载数据抓取Ajax
  特征
  右键单击->查看网页。源代码中没有特定的数据
  滚动鼠标滚轮或其他操作时加载
  ץȡ
  F12打开控制台,选择XHR异步加载数据包,找到页面操作并抓取网络数据包
  通过XHR-->头-->常规-->请求URL获取JSON文件URL地址
  通过XHR-->标题-->查询字符串参数
  豆瓣电影数据采集案例
  目标
  地址:豆瓣电影-排行榜-剧情
  类型名称=%E5%89%A7%E6%83%85&type=11&interval\id=100:90&action=
  目标:提升电影名称和分数
  F12数据包捕获(XHR)
  1、RequestURL(基本URL地址):
  2、Query字符串参数(查询参数)
  
# 查询参数如下:
type: 13 # 电影类型
interval_id: 100:90
action: '[{},{},{}]'
start: 0 # 每次加载电影的起始索引值
limit: 20 # 每次加载的电影数量
  JSON文件位于以下地址:
  参考URL地址+查询参数
  ''+'类型=11,间隔=100%3A90,动作=20,开始=20,限制=20'
  代码实现
  
import requests
import time
from fake_useragent import UserAgent
class DoubanSpider(object):
def __init__(self):
self.base_url = 'https://movie.douban.com/j/chart/top_list?'
self.i = 0
def get_html(self, params):
headers = {'User-Agent': UserAgent().random}
res = requests.get(url=self.base_url, params=params, headers=headers)
res.encoding = 'utf-8'
html = res.json() # 将json格式的字符串转为python数据类型
self.parse_html(html) # 直接调用解析函数
def parse_html(self, html):
# html: [{电影1信息},{电影2信息},{}]
item = {}
for one in html:
item['name'] = one['title'] # 电影名
item['score'] = one['score'] # 评分
item['time'] = one['release_date'] # 打印测试
# 打印显示
print(item)
self.i += 1
# 获取电影总数
def get_total(self, typ):
# 异步动态加载的数据 都可以在XHR数据抓包
url = 'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90'.format(typ)
ua = UserAgent()
html = requests.get(url=url, headers={'User-Agent': ua.random}).json()
total = html['total']
return total
def main(self):
typ = input('请输入电影类型(剧情|喜剧|动作):')
typ_dict = {'剧情': '11', '喜剧': '24', '动作': '5'}
typ = typ_dict[typ]
total = self.get_total(typ) # 获取该类型电影总数量
for page in range(0, int(total), 20):
params = {
'type': typ,
'interval_id': '100:90',
'action': '',
'start': str(page),
'limit': '20'}
self.get_html(params)
time.sleep(1)
print('爬取的电影的数量:', self.i)
if __name__ == '__main__':
spider = DoubanSpider()
spider.main()
  腾讯招聘数据采集(Ajax)
  确定URL地址和目的地
  网址:百度搜索腾讯招聘-查看职位
  目标:职位名称、工作职责和工作要求
  需求与分析
  通过查看web源代码,我们知道所需的数据是Ajax动态加载
  通过F12抓取网络数据包进行分析
  第一级页面捕获数据:职位名称
  第二页捕获的数据:工作职责和工作要求
  第一级页面JSON地址(页面索引正在更改,未检查时间戳)
  {}&pageSize=10&language=zh-cn&area=cn
  辅助页面地址(postid正在更改,可以在主页面中获取)
  {}&language=zh cn
  Useragents.py文件
  
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)',
]
  
import time
import json
import random
import requests
from useragents import ua_list
class TencentSpider(object):
def __init__(self):
self.one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'
self.two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn'
self.f = open('tencent.json', 'a') # 打开文件
self.item_list = [] # 存放抓取的item字典数据
# 获取响应内容函数
def get_page(self, url):
headers = {'User-Agent': random.choice(ua_list)}
html = requests.get(url=url, headers=headers).text
html = json.loads(html) # json格式字符串转为Python数据类型
return html
# 主线函数: 获取所有数据
def parse_page(self, one_url):
html = self.get_page(one_url)
item = {}
for job in html['Data']['Posts']:
item['name'] = job['RecruitPostName'] # 名称
post_id = job['PostId'] # postId,拿postid为了拼接二级页面地址
# 拼接二级地址,获取职责和要求
two_url = self.two_url.format(post_id)
item['duty'], item['require'] = self.parse_two_page(two_url)
print(item)
self.item_list.append(item) # 添加到大列表中
# 解析二级页面函数
def parse_two_page(self, two_url):
html = self.get_page(two_url)
duty = html['Data']['Responsibility'] # 工作责任
duty = duty.replace('\r\n', '').replace('\n', '') # 去掉换行
require = html['Data']['Requirement'] # 工作要求
require = require.replace('\r\n', '').replace('\n', '') # 去掉换行
return duty, require
# 获取总页数
def get_numbers(self):
url = self.one_url.format(1)
html = self.get_page(url)
numbers = int(html['Data']['Count']) // 10 + 1 # 每页有10个推荐
return numbers
def main(self):
number = self.get_numbers()
for page in range(1, 3):
one_url = self.one_url.format(page)
self.parse_page(one_url)
# 保存到本地json文件:json.dump
json.dump(self.item_list, self.f, ensure_ascii=False)
self.f.close()
if __name__ == '__main__':
start = time.time()
spider = TencentSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end - start))
  以上是本文的全部内容。我希望这将有助于你的学习,我希望你能支持脚本的房子 查看全部

  ajax抓取网页内容(
2019年X月中华人民共和国县以上反爬机制及处理方式)
  Python抓取Ajax动态加载网页分析
  更新时间:2019年9月5日08:47:06作者:凌妮珊
  本文文章主要介绍Python抓取Ajax动态加载网页的过程。通过实例代码对其进行了详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考
  常见防爬机理及处理方法
  1、Headers反爬虫:cookie、referer、用户代理
  解决方案:通过F12获取标题并将其传递给请求。Get()方法
  2、IP限制:网站根据IP地址访问频率进行反向爬网,短时间访问IP
  解决方案:
  1、构建自己的IP代理池,每次访问时随机选择代理,并经常更新代理池
  2、购买开放代理或专用代理IP
  3、降低爬行速度
  3、User-代理限制:类似于IP限制
  解决方案:构建自己的用户代理池,并在每次访问时随机选择它
  5、authenticate查询参数或表单数据(salt、sign)
  解决方案:找到JS文件,分析JS处理方法,并使用Python以相同的方式进行处理
  6、处理响应内容
  解决方案:打印和查看响应内容,并使用XPath或正则表达式进行处理
  Python中标题和表单数据的常规处理
  1、pycharm输入方式:Ctrl+R,选择正则表达式
  2、处理标题和表单数据
  (**):(**)
  “1”:“1”:“2”
  3、单击“全部替换”
  民政部网站数据采集
  目的:获取最新的中华人民共和国县级以上行政区划代码
  URL:-民政数据-行政区划代码
  实施步骤
  1、从民政数据中提取最新的行政区划代码链接网站
  最新的一个在上面。命名格式:2019年x月中华人民共和国县级以上行政区划代码
  
import requests
from lxml import etree
import re

url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
html = requests.get(url, headers=headers).text
parse_html = etree.HTML(html)
article_list = parse_html.xpath('//a[@class="artitlelist"]')

for article in article_list:
title = article.xpath('./@title')[0]
# 正则匹配title中包含这个字符串的链接
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
two_link = 'http://www.mca.gov.cn' + article.xpath('./@href')[0]
print(two_link)
break
  2、从第二页链接中提取真实链接(反爬网响应,在网页内容中嵌入JS,并指向新的网页链接)
  向辅助页面链接发送请求以获取响应内容,并查看嵌入的JS代码
  真实二级页面链接的常规提取
  
# 爬取二级“假”链接
two_html = requests.get(two_link, headers=headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
new_two_link = re.findall(r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" ', two_html, re.S)[0]
  3、query是否已在数据库表中对此链接进行爬网,以建立增量爬网器
  在数据库中构建版本表以存储爬网链接
  每次执行程序时,检查版本表中的记录,查看它们是否已被爬网
  
cursor.execute('select * from version')
result = self.cursor.fetchall()
if result:
if result[-1][0] == two_link:
print('已是最新')
else:
# 有更新,开始抓取
# 将链接再重新插入version表记录
  4、代码实现
  
import requests
from lxml import etree
import re
import pymysql
class GovementSpider(object):
def __init__(self):
self.url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'
self.headers = {'User-Agent': 'Mozilla/5.0'}
# 创建2个对象
self.db = pymysql.connect('127.0.0.1', 'root', '123456', 'govdb', charset='utf8')
self.cursor = self.db.cursor()
# 获取假链接
def get_false_link(self):
html = requests.get(url=self.url, headers=self.headers).text
# 此处隐藏了真实的二级页面的url链接,真实的在假的响应网页中,通过js脚本生成,
# 假的链接在网页中可以访问,但是爬取到的内容却不是我们想要的
parse_html = etree.HTML(html)
a_list = parse_html.xpath('//a[@class="artitlelist"]')
for a in a_list:
# get()方法:获取某个属性的值
title = a.get('title')
if title.endswith('代码'):
# 获取到第1个就停止即可,第1个永远是最新的链接
false_link = 'http://www.mca.gov.cn' + a.get('href')
print("二级“假”链接的网址为", false_link)
break
# 提取真链接
self.incr_spider(false_link)
# 增量爬取函数
def incr_spider(self, false_link):
self.cursor.execute('select url from version where url=%s', [false_link])
# fetchall: (('http://xxxx.html',),)
result = self.cursor.fetchall()
# not result:代表数据库version表中无数据
if not result:
self.get_true_link(false_link)
# 可选操作: 数据库version表中只保留最新1条数据
self.cursor.execute("delete from version")
# 把爬取后的url插入到version表中
self.cursor.execute('insert into version values(%s)', [false_link])
self.db.commit()
else:
print('数据已是最新,无须爬取')
# 获取真链接
def get_true_link(self, false_link):
# 先获取假链接的响应,然后根据响应获取真链接
html = requests.get(url=false_link, headers=self.headers).text
# 从二级页面的响应中提取真实的链接(此处为JS动态加载跳转的地址)
re_bds = r'window.location.href="(.*?)" rel="external nofollow" rel="external nofollow" '
pattern = re.compile(re_bds, re.S)
true_link = pattern.findall(html)[0]
self.save_data(true_link) # 提取真链接的数据
# 用xpath直接提取数据
def save_data(self, true_link):
html = requests.get(url=true_link, headers=self.headers).text
# 基准xpath,提取每个信息的节点列表对象
parse_html = etree.HTML(html)
tr_list = parse_html.xpath('//tr[@height="19"]')
for tr in tr_list:
code = tr.xpath('./td[2]/text()')[0].strip() # 行政区划代码
name = tr.xpath('./td[3]/text()')[0].strip() # 单位名称
print(name, code)
# 主函数
def main(self):
self.get_false_link()
if __name__ == '__main__':
spider = GovementSpider()
spider.main()
  动态加载数据抓取Ajax
  特征
  右键单击->查看网页。源代码中没有特定的数据
  滚动鼠标滚轮或其他操作时加载
  ץȡ
  F12打开控制台,选择XHR异步加载数据包,找到页面操作并抓取网络数据包
  通过XHR-->头-->常规-->请求URL获取JSON文件URL地址
  通过XHR-->标题-->查询字符串参数
  豆瓣电影数据采集案例
  目标
  地址:豆瓣电影-排行榜-剧情
  类型名称=%E5%89%A7%E6%83%85&type=11&interval\id=100:90&action=
  目标:提升电影名称和分数
  F12数据包捕获(XHR)
  1、RequestURL(基本URL地址):
  2、Query字符串参数(查询参数)
  
# 查询参数如下:
type: 13 # 电影类型
interval_id: 100:90
action: '[{},{},{}]'
start: 0 # 每次加载电影的起始索引值
limit: 20 # 每次加载的电影数量
  JSON文件位于以下地址:
  参考URL地址+查询参数
  ''+'类型=11,间隔=100%3A90,动作=20,开始=20,限制=20'
  代码实现
  
import requests
import time
from fake_useragent import UserAgent
class DoubanSpider(object):
def __init__(self):
self.base_url = 'https://movie.douban.com/j/chart/top_list?'
self.i = 0
def get_html(self, params):
headers = {'User-Agent': UserAgent().random}
res = requests.get(url=self.base_url, params=params, headers=headers)
res.encoding = 'utf-8'
html = res.json() # 将json格式的字符串转为python数据类型
self.parse_html(html) # 直接调用解析函数
def parse_html(self, html):
# html: [{电影1信息},{电影2信息},{}]
item = {}
for one in html:
item['name'] = one['title'] # 电影名
item['score'] = one['score'] # 评分
item['time'] = one['release_date'] # 打印测试
# 打印显示
print(item)
self.i += 1
# 获取电影总数
def get_total(self, typ):
# 异步动态加载的数据 都可以在XHR数据抓包
url = 'https://movie.douban.com/j/chart/top_list_count?type={}&interval_id=100%3A90'.format(typ)
ua = UserAgent()
html = requests.get(url=url, headers={'User-Agent': ua.random}).json()
total = html['total']
return total
def main(self):
typ = input('请输入电影类型(剧情|喜剧|动作):')
typ_dict = {'剧情': '11', '喜剧': '24', '动作': '5'}
typ = typ_dict[typ]
total = self.get_total(typ) # 获取该类型电影总数量
for page in range(0, int(total), 20):
params = {
'type': typ,
'interval_id': '100:90',
'action': '',
'start': str(page),
'limit': '20'}
self.get_html(params)
time.sleep(1)
print('爬取的电影的数量:', self.i)
if __name__ == '__main__':
spider = DoubanSpider()
spider.main()
  腾讯招聘数据采集(Ajax)
  确定URL地址和目的地
  网址:百度搜索腾讯招聘-查看职位
  目标:职位名称、工作职责和工作要求
  需求与分析
  通过查看web源代码,我们知道所需的数据是Ajax动态加载
  通过F12抓取网络数据包进行分析
  第一级页面捕获数据:职位名称
  第二页捕获的数据:工作职责和工作要求
  第一级页面JSON地址(页面索引正在更改,未检查时间戳)
  {}&pageSize=10&language=zh-cn&area=cn
  辅助页面地址(postid正在更改,可以在主页面中获取)
  {}&language=zh cn
  Useragents.py文件
  
ua_list = [
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)',
]
  
import time
import json
import random
import requests
from useragents import ua_list
class TencentSpider(object):
def __init__(self):
self.one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'
self.two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn'
self.f = open('tencent.json', 'a') # 打开文件
self.item_list = [] # 存放抓取的item字典数据
# 获取响应内容函数
def get_page(self, url):
headers = {'User-Agent': random.choice(ua_list)}
html = requests.get(url=url, headers=headers).text
html = json.loads(html) # json格式字符串转为Python数据类型
return html
# 主线函数: 获取所有数据
def parse_page(self, one_url):
html = self.get_page(one_url)
item = {}
for job in html['Data']['Posts']:
item['name'] = job['RecruitPostName'] # 名称
post_id = job['PostId'] # postId,拿postid为了拼接二级页面地址
# 拼接二级地址,获取职责和要求
two_url = self.two_url.format(post_id)
item['duty'], item['require'] = self.parse_two_page(two_url)
print(item)
self.item_list.append(item) # 添加到大列表中
# 解析二级页面函数
def parse_two_page(self, two_url):
html = self.get_page(two_url)
duty = html['Data']['Responsibility'] # 工作责任
duty = duty.replace('\r\n', '').replace('\n', '') # 去掉换行
require = html['Data']['Requirement'] # 工作要求
require = require.replace('\r\n', '').replace('\n', '') # 去掉换行
return duty, require
# 获取总页数
def get_numbers(self):
url = self.one_url.format(1)
html = self.get_page(url)
numbers = int(html['Data']['Count']) // 10 + 1 # 每页有10个推荐
return numbers
def main(self):
number = self.get_numbers()
for page in range(1, 3):
one_url = self.one_url.format(page)
self.parse_page(one_url)
# 保存到本地json文件:json.dump
json.dump(self.item_list, self.f, ensure_ascii=False)
self.f.close()
if __name__ == '__main__':
start = time.time()
spider = TencentSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end - start))
  以上是本文的全部内容。我希望这将有助于你的学习,我希望你能支持脚本的房子

ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)

网站优化优采云 发表了文章 • 0 个评论 • 134 次浏览 • 2021-09-13 19:21 • 来自相关话题

  ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)
  优采云采集器 can采集AJAX 网页,如果要采集微博,流程基本就是,新建任务-设计规则-制定采集计划-执行采集计划,微博话题规则市场有直接下载。如果你想修改它,你可以在这里修改它。这个采集 软件是免费的。可以多试几次,很容易上手。
  使用ieHTTPHeaders工具获取异步请求的参数,然后使用.NET System.Net中的类模拟Ajax的异步HTTP请求获取服务器返回的数据。
  取出他的url,取出value,提交给他的服务器试试
  Ajax 可以在一定程度上防止网页数据被采集。
  要了解原因,首先要了解网页采集tools的工作原理。大多数流行的网页采集tools都是从文档中的采集信息中读取文档的。
  据说Ajax可以在一定程度上防止网页数据被采集,因为Ajax获取的数据一般是通过js生成标签。这样的标签不在文档中,爬虫自然也抓不到数据。 .
  ajax和js虽然对用户体验有好处,在一定程度上可以防止网页数据被采集,但不利于优化,因为搜索引擎抓取工具的工作原理和网页抓取类似tools ,网络爬虫工具无法抓取的内容,搜索引擎也无法抓取,不利于网站的seo优化。
  一个网站必须有自己的定位,商业网站应该做seo优化增加搜索量,尽量不要用ajax加载大量内容; systemic网站注重实用性,可以使用ajax提升用户体验;内容高的网站原创也可以使用ajax和js加载文档,防止内容被爬取。
  优采云采集器AJAX网页数据怎么写采集rules:优采云采集器可采集AJAX网页,如果要采集微博,流程基本一样,创建一个新的Task-design rules-formulate采集计划-execute采集计划,微博话题的规则可以直接在市场上下载,你可以在这个地方修改,这个采集软件是免费的,试试自己动手几次,很容易上手
  如何使用优采云采集器采集网页信息-:优采云采集器可采集AJAX网页,如果要采集微博,流程基本就是,新建一个任务——设计规则-制定采集计划-实现采集计划,微博话题的规则可以直接在市场上下载,如果要修改可以在这个地方修改,这个采集软件是免费的,你自己多试几次,很容易上手
  网页数据采集,如何使用优采云采集数据-本例:这个使用Forestider很简单,配置两个模板。模板一是从这个页面上的链接中做一个链接提取,你可以选择过滤或收录哪些链接。模板二是点击链接后的下一级数据。以其中一个页面为模板,即可获取到下一级页面数据的所有链接。 优采云我用不 用过,我是学生买不起,不好玩。。。我用的是免费版的Forestider
  请教高手,如何采集AJAX网页?:方法一:想办法找到AJAX请求的网址(firefox应该可以查看网址)。然后访问这个URL,然后按照规则获取。方法二:应该有数据采集器可采集这样的页面数据,你可以下载一个试试,我没用过,哈哈。
  为什么说优采云采集器是最好的网页数据采集器:因为优采云采集器与市面上其他采集软件不同,优采云采集器是不需要复杂的采集Rule 设置,只需点击几下鼠标就可以成功配置一个采集 任务,让体验极其简单,大大提高工作效率。同时,它具有以下三个优点:1、任何人都可以使用 还在学习中...
  优采云采集器如何将数据发布到网站?我不明白!求教!!!!!:网站上贴的函数教程最近更新了,请查收优采云采集器还是很简单的
  c#网页数据抓取ajax:ajax加载的数据其实从源码中是看不到的。源代码都是脚本。目前支持ajax的采集软件只有优采云采集器免费。是 自动识别和响应ajax,这个是从视觉层面提取的,也就是说无论加载什么技术,优采云采集器通过网页显示后提取,也就是你可以得到的数据使用鼠标单击选择查看 只需提取它。具体可以自己试试,优采云采集器网站也有专门的文章​​@讲ajax。
  如何实现采集ajax-生成的数据内容:这是什么?给点意见,我完全不懂ajax。 var dsa = $('#input1').val();// 获取文本框的值就是你要在php页面中传递的值。 // 为了防止缓存,我添加了一个随机参数问题来补充,我提供了php脚本代码,请大家帮我写一下。请新建一个html文件,复制下面的代码进行测试。//为了防止缓存,我添加了一个随机参数来测试,它没有显示出来。我想应该是PHP没有收到值。我的div id名字写错了,php要获取值,参数要改成变量。完整代码如下。经过测试,写的太多了,给你JQUERY
  如何实现采集ajax生成的数据内容: curl_setopt($ch, curlopt_useragent, mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 1.1.4322; .net clr 2.0.50727)); 采集地址上有js生成的内容,用file_get_contents无法获取,也不能用上面的方法得到的。真心求教
  优采云采集器3.2版本可以将采集的内容发布到网站,怎么做-:优采云采集器3.2版本是相对于3.1版本增加了很多有用的功能,比如数据恢复功能,增加发布功能,如果发布到网站,需要自己设置。勾选任务的时候可以选择导出数据时发布到网站,可以自己设置。相关设置OK 查看全部

  ajax抓取网页内容(优采云采集器可以采集AJAX网页,新建任务——执行采集计划)
  优采云采集器 can采集AJAX 网页,如果要采集微博,流程基本就是,新建任务-设计规则-制定采集计划-执行采集计划,微博话题规则市场有直接下载。如果你想修改它,你可以在这里修改它。这个采集 软件是免费的。可以多试几次,很容易上手。
  使用ieHTTPHeaders工具获取异步请求的参数,然后使用.NET System.Net中的类模拟Ajax的异步HTTP请求获取服务器返回的数据。
  取出他的url,取出value,提交给他的服务器试试
  Ajax 可以在一定程度上防止网页数据被采集。
  要了解原因,首先要了解网页采集tools的工作原理。大多数流行的网页采集tools都是从文档中的采集信息中读取文档的。
  据说Ajax可以在一定程度上防止网页数据被采集,因为Ajax获取的数据一般是通过js生成标签。这样的标签不在文档中,爬虫自然也抓不到数据。 .
  ajax和js虽然对用户体验有好处,在一定程度上可以防止网页数据被采集,但不利于优化,因为搜索引擎抓取工具的工作原理和网页抓取类似tools ,网络爬虫工具无法抓取的内容,搜索引擎也无法抓取,不利于网站的seo优化。
  一个网站必须有自己的定位,商业网站应该做seo优化增加搜索量,尽量不要用ajax加载大量内容; systemic网站注重实用性,可以使用ajax提升用户体验;内容高的网站原创也可以使用ajax和js加载文档,防止内容被爬取。
  优采云采集器AJAX网页数据怎么写采集rules:优采云采集器可采集AJAX网页,如果要采集微博,流程基本一样,创建一个新的Task-design rules-formulate采集计划-execute采集计划,微博话题的规则可以直接在市场上下载,你可以在这个地方修改,这个采集软件是免费的,试试自己动手几次,很容易上手
  如何使用优采云采集器采集网页信息-:优采云采集器可采集AJAX网页,如果要采集微博,流程基本就是,新建一个任务——设计规则-制定采集计划-实现采集计划,微博话题的规则可以直接在市场上下载,如果要修改可以在这个地方修改,这个采集软件是免费的,你自己多试几次,很容易上手
  网页数据采集,如何使用优采云采集数据-本例:这个使用Forestider很简单,配置两个模板。模板一是从这个页面上的链接中做一个链接提取,你可以选择过滤或收录哪些链接。模板二是点击链接后的下一级数据。以其中一个页面为模板,即可获取到下一级页面数据的所有链接。 优采云我用不 用过,我是学生买不起,不好玩。。。我用的是免费版的Forestider
  请教高手,如何采集AJAX网页?:方法一:想办法找到AJAX请求的网址(firefox应该可以查看网址)。然后访问这个URL,然后按照规则获取。方法二:应该有数据采集器可采集这样的页面数据,你可以下载一个试试,我没用过,哈哈。
  为什么说优采云采集器是最好的网页数据采集器:因为优采云采集器与市面上其他采集软件不同,优采云采集器是不需要复杂的采集Rule 设置,只需点击几下鼠标就可以成功配置一个采集 任务,让体验极其简单,大大提高工作效率。同时,它具有以下三个优点:1、任何人都可以使用 还在学习中...
  优采云采集器如何将数据发布到网站?我不明白!求教!!!!!:网站上贴的函数教程最近更新了,请查收优采云采集器还是很简单的
  c#网页数据抓取ajax:ajax加载的数据其实从源码中是看不到的。源代码都是脚本。目前支持ajax的采集软件只有优采云采集器免费。是 自动识别和响应ajax,这个是从视觉层面提取的,也就是说无论加载什么技术,优采云采集器通过网页显示后提取,也就是你可以得到的数据使用鼠标单击选择查看 只需提取它。具体可以自己试试,优采云采集器网站也有专门的文章​​@讲ajax。
  如何实现采集ajax-生成的数据内容:这是什么?给点意见,我完全不懂ajax。 var dsa = $('#input1').val();// 获取文本框的值就是你要在php页面中传递的值。 // 为了防止缓存,我添加了一个随机参数问题来补充,我提供了php脚本代码,请大家帮我写一下。请新建一个html文件,复制下面的代码进行测试。//为了防止缓存,我添加了一个随机参数来测试,它没有显示出来。我想应该是PHP没有收到值。我的div id名字写错了,php要获取值,参数要改成变量。完整代码如下。经过测试,写的太多了,给你JQUERY
  如何实现采集ajax生成的数据内容: curl_setopt($ch, curlopt_useragent, mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 1.1.4322; .net clr 2.0.50727)); 采集地址上有js生成的内容,用file_get_contents无法获取,也不能用上面的方法得到的。真心求教
  优采云采集器3.2版本可以将采集的内容发布到网站,怎么做-:优采云采集器3.2版本是相对于3.1版本增加了很多有用的功能,比如数据恢复功能,增加发布功能,如果发布到网站,需要自己设置。勾选任务的时候可以选择导出数据时发布到网站,可以自己设置。相关设置OK

ajax抓取网页内容( Python网络爬虫内容提取器)

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2021-09-08 22:08 • 来自相关话题

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1、介绍
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  在上一篇python使用xslt提取网页数据的文章中,提取的内容是直接从网页源代码中获取的。但是部分Ajax动态内容在源码中找不到,需要找一个合适的库来加载异步或动态加载的内容,交给本项目的提取器提取。
  Python 可以使用 selenium 来执行 javascript,而 selenium 可以让浏览器自动加载页面并获取所需的数据。 Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源代码及实验过程
  假设我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:利用客户集合的直观打标签功能查找多个站,可以极快的自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面的程序中。注:本文仅记录实验过程。在实际系统中,xslt程序会以多种方式注入到内容提取器中。
  
  第2步:执行如下代码(windows10下测试,python3.2,源码下载地址文章end GitHub),请注意:xslt是一个比较长的字符串,如果你删掉这个字符串,代码没几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取
  
  4、阅读下一个
  到目前为止,我们已经通过两篇文章 文章演示了如何抓取静态和动态网页内容。两者都使用 xslt 一次从网页中提取所需的内容。实际上,xslt 是一种更复杂的编程语言。写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇《1分钟快速生成用于网页内容提取的Xslt》将介绍如何生成xslt。
  5、汇聚GooSeeker开源代码下载源码
  1.GooSeeker 开源 Python 网络爬虫 GitHub 源码
  6、文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址 查看全部

  ajax抓取网页内容(
Python网络爬虫内容提取器)
  
  1、介绍
  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
  2.提取动态内容的技术成分
  在上一篇python使用xslt提取网页数据的文章中,提取的内容是直接从网页源代码中获取的。但是部分Ajax动态内容在源码中找不到,需要找一个合适的库来加载异步或动态加载的内容,交给本项目的提取器提取。
  Python 可以使用 selenium 来执行 javascript,而 selenium 可以让浏览器自动加载页面并获取所需的数据。 Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
  3、源代码及实验过程
  假设我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
  
  第一步:利用客户集合的直观打标签功能查找多个站,可以极快的自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面的程序中。注:本文仅记录实验过程。在实际系统中,xslt程序会以多种方式注入到内容提取器中。
  
  第2步:执行如下代码(windows10下测试,python3.2,源码下载地址文章end GitHub),请注意:xslt是一个比较长的字符串,如果你删掉这个字符串,代码没几行,足以展示Python的强大
  #/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""\
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
  第三步:可以看到网页上的手机名称和价格已经被正确抓取
  
  4、阅读下一个
  到目前为止,我们已经通过两篇文章 文章演示了如何抓取静态和动态网页内容。两者都使用 xslt 一次从网页中提取所需的内容。实际上,xslt 是一种更复杂的编程语言。写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这就有意义了,程序员就不用再花时间编写和调试爬虫规则了。这是一项非常费时费力的工作。下一篇《1分钟快速生成用于网页内容提取的Xslt》将介绍如何生成xslt。
  5、汇聚GooSeeker开源代码下载源码
  1.GooSeeker 开源 Python 网络爬虫 GitHub 源码
  6、文档修改历史
  2016-05-26:V2.0,添加文字说明
  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址

ajax抓取网页内容( ():)

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2021-09-08 22:07 • 来自相关话题

  ajax抓取网页内容(
():)
  ajax获取网页的cookie值并处理页面信息
  注意:没有必要。后台可以直接操作数据,不用ajax更简单
  ($sn_arr = $_COOKIE;) ---------------获取所有cookies进行过滤操作
  1.js(页面加载0.5ms后执行该函数)
   $(function(){
setTimeout(function () {
$.ajax({
url:"/supplierbuyer/order/getCookie",
data:{
},
type:"POST",
dataType:"JSON",
success:function(data){
if(data.status==true){
//处理cookie的数据
var cookie_content = data['sn_arr'];
$.each(cookie_content, function(index, item){
if (index.startsWith("order_sn_")) {
var order_sn = index.substr(9);
$('.'+order_sn).text('');
$('.'+order_sn).parent().prev().css("background","");
}
});
}else{
console.log(data);
return false;
}
}
});
}, 0.5);
});
  2.php
   /**
* 获取cookie
*/
public function getCookie()
{
$sn_arr = $_COOKIE;
if ($sn_arr) {
$data['status'] = true;
$data['sn_arr'] = $sn_arr;
$data['msg'] = 'ok';
} else {
$data['status'] = false;
$data['sn_arr'] = '';
$data['msg'] = '网络错误,请稍后重试~';
}
echo json_encode($data);
exit();
}
  posted @ 2018-12-05 16:13 很有趣。阅读(4510)review(0)edit
  ) 查看全部

  ajax抓取网页内容(
():)
  ajax获取网页的cookie值并处理页面信息
  注意:没有必要。后台可以直接操作数据,不用ajax更简单
  ($sn_arr = $_COOKIE;) ---------------获取所有cookies进行过滤操作
  1.js(页面加载0.5ms后执行该函数)
   $(function(){
setTimeout(function () {
$.ajax({
url:"/supplierbuyer/order/getCookie",
data:{
},
type:"POST",
dataType:"JSON",
success:function(data){
if(data.status==true){
//处理cookie的数据
var cookie_content = data['sn_arr'];
$.each(cookie_content, function(index, item){
if (index.startsWith("order_sn_")) {
var order_sn = index.substr(9);
$('.'+order_sn).text('');
$('.'+order_sn).parent().prev().css("background","");
}
});
}else{
console.log(data);
return false;
}
}
});
}, 0.5);
});
  2.php
   /**
* 获取cookie
*/
public function getCookie()
{
$sn_arr = $_COOKIE;
if ($sn_arr) {
$data['status'] = true;
$data['sn_arr'] = $sn_arr;
$data['msg'] = 'ok';
} else {
$data['status'] = false;
$data['sn_arr'] = '';
$data['msg'] = '网络错误,请稍后重试~';
}
echo json_encode($data);
exit();
}
  posted @ 2018-12-05 16:13 很有趣。阅读(4510)review(0)edit
  )

官方客服QQ群

微信人工客服

QQ人工客服


线