python webkit 异步抓取页面数据

#!/usr/bin/python
from ghost import Ghost


class FetcherCartoon:
	def getCartoonUrl(self, url):
		
		if url is None:
			return false
		#todo many decide about url
		
		ghost = Ghost()
		#open webkit
		ghost.open(url)
		#exceute javascript and get what you want 
		result, resources = ghost.evaluate("document.getElementById('cp_image').getAttribute('src');")
		del resources
		return result

if __name__ == "__main__":
	url = 'http://www.dm5.com/m136836-p3/'
	result = None
	fetcher = FetcherCartoon()


	result = fetcher.getCartoonUrl(url)
	print result


### 如何使用Python编写爬虫程序来抓取含有中文内容的网页数据 为了实现这一目标,可以采用多种方法和技术栈组合。下面介绍一种基于`requests`库和`BeautifulSoup`库的方式来进行静态页面中的中文内容抓取;对于动态加载的内容,则可借助于`Selenium`工具。 #### 静态页面抓取方案 当目标网站是以HTML形式直接返回所需信息时,可以直接利用`requests.get()`函数发起HTTP请求获取整个页面源码,并通过设置合适的编码方式确保能正确处理中文字符: ```python import requests from bs4 import BeautifulSoup url = 'http://example.com' # 替换成实际的目标网址 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'} response = requests.get(url, headers=headers) if response.status_code == 200: content = response.content.decode('utf-8') # 假设服务器端采用了UTF-8编码发送响应体 else: raise Exception(f"Failed to load page {url}") soup = BeautifulSoup(content, "lxml") # 解析HTML文档结构 for tag in soup.find_all(['p', 'h1']): # 查找所有的<p>标签以及<h1> text = tag.text.strip() if any('\u4e00' <= char <= '\u9fff' for char in text): # 判断是否包含汉字 print(text) ``` 这段代码展示了如何向指定URL发出GET请求并接收其响应,随后运用正则表达式过滤出只含中文的文字节点[^2]。 #### 动态加载内容抓取方案 如果遇到AJAX异步更新或JavaScript渲染后的DOM元素变化情况下的复杂场景,单纯依靠上述手段可能无法满足需求。此时推荐引入浏览器自动化框架——`Selenium WebDriver`模拟真实用户的浏览行为直至完成全部资源下载后再进行分析操作: 安装必要的依赖包: ```bash pip install selenium beautifulsoup4 lxml ``` 准备ChromeDriver驱动文件并与本地环境变量关联好路径之后,在脚本里初始化WebDriver实例对象: ```python from selenium import webdriver from time import sleep from bs4 import BeautifulSoup driver_path = r'C:\path\to\chromedriver.exe' browser = webdriver.Chrome(executable_path=driver_path) try: browser.get('https://www.example.com') while True: try: element = browser.find_element_by_class_name("load-more-button") element.click() sleep(2) # 给予足够的时间让新内容完全呈现出来 html_source = browser.page_source break except NoSuchElementException as e: html_source = browser.page_source break finally: browser.quit() soup = BeautifulSoup(html_source,"lxml") # 同样地,这里也可以继续执行之前提到过的筛选逻辑... ``` 此部分说明了针对某些特殊类型的Web应用程序所采取的不同策略,即先启动无头模式下的Chromium进程访问待采集站点,再依据实际情况决定何时停止滚动条下拉动作从而获得完整的HTML片段供后续解析工作调用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值