python抓取动态网页(Python爬虫实战:爬取Drupal论坛帖子列表(一))
优采云 发布时间: 2021-10-16 11:11python抓取动态网页(Python爬虫实战:爬取Drupal论坛帖子列表(一))
1 简介
在之前的Python爬虫实战中:抓取Drupal论坛帖子列表,抓取一个用Drupal制作的论坛,是静态页面,比较容易抓取,即使直接解析html源文件,也可以抓取您需要的内容。相反,JavaScript 实现的动态网页内容无法从 html 源代码中抓取所需的内容,必须先执行 JavaScript。
我们已经在 Python 爬虫中使用 Selenium+PhantomJS 来爬取 Ajax 和动态 HTML 内容。文章已经成功测试了动态网页内容的爬取方法。本文重写实验程序,使用开源Python爬虫指定的标准python内容提取器改代码。它非常简洁。
二、技术要点
我们在很多文章中都说过这个开源爬虫的目的:节省程序员的时间。关键是要节省编写提取规则的时间,尤其是调试规则。它可以节省时间。问题是在1分钟内快速生成用于网页内容提取的xslt。有一个解决方案。在本文中,我们使用京东网站作为测试目标,电子商务网站有很多动态内容,比如商品价格和评论数等,经常使用后加载方法。html源文件加载完成后,执行javascript代码填充动态内容。因此,本案例主要验证动态内容的爬取。
另外,本文案例没有使用GooSeeker爬虫API,而是将MS Strategy生成的xslt脚本程序保存在本地文件中,在程序运行时读出该文件并注入gsExtractor提取器。以后会有一个特例来演示如何使用API
综上所述,本例的两个技术点总结如下:
3.Python源代码
# -*- coding:utf-8 -*-
# 爬取京东商品列表, 以手机商品列表为例
# 示例网址:http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5
# crawler_jd_list.py
# 版本: V1.0
from urllib import request
from lxml import etree
from selenium import webdriver
from gooseeker import gsExtractor
import time
class Spider:
def __init__(self):
self.scrollpages = 0
self.waittime = 3
self.phantomjsPath = 'C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe'
def getContent(self, url):
browser = webdriver.PhantomJS( executable_path = self.phantomjsPath )
browser.get(url)
time.sleep(self.waittime)
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
jdlistExtra = gsExtractor()
jdlistExtra.setXsltFromFile("jd_list.xml")
output = jdlistExtra.extract(doc)
return output
def saveContent(self, filepath, content):
file_obj = open(filepath, 'w', encoding='UTF-8')
file_obj.write(content)
file_obj.close()
url = 'http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5'
jdspider = Spider()
result = jdspider.getContent(url)
jdspider.saveContent('京东手机列表_1.xml', str(result))
源码下载位置请见文章末尾的GitHub源码。
4. 获取结果
运行上述代码,会抓取京东手机分类页面上的所有手机型号、价格等信息,并保存到本地文件“京东手机list_1.xml”中。当我们用浏览器打开这个结果文件时,会看到如下内容:
五、相关文件
1. Python 即时网络爬虫项目:内容提取器的定义 6. 采集GooSeeker开源代码下载源
1. GooSeeker 开源 Python 网络爬虫 GitHub 源码 7. 文档修改历史
1, 2016-06-06: V1.0
上一章爬取 Drupal 论坛帖子列表 下一章 Scrapy 架构的初步研究