爬取当当网python类书籍的信息(存储在mysql中)

我爬取到的数据是存储在mysql数据库中的,没有需要安装。

本文设计到的python库有:bs4、scrapy、pymysql、

首先在cmd命令行输入下图(1)的命令,显示下图(2)中的内容时,项目创建成功,然后用pycharm打开这个项目。

没有安装scrapy框架的建议用anaconda安装,然后在anacomda prompt输入(1)的命令

使用pycharm打开项目后目录结构如下(在spiders中新建mySpider.py、book下新建run.py):

然后分析当当网的图书数据进行分析,打开当当网,在搜索中输入python,看到如下页面:

此时的地址为:http://search.dangdang.com/?key=python&act=input

分析html代码的结构,我们看到每本书都是一个<li>的项目,而它们的结构是完全一样的,这些

<li>包含在一个<ul>中,我们只关心图书的名称title、作者author、出版时间date、出版社publisher、

价格price和内容简介detail。下面对提取这些信息的代码做一个分析:

1、title = li.xpath("./a[position()=1]/@title").extract_first()

<li>中有多个<a>标签,从html代码中可以看到书名信息包含在一个<a>的title属性中,因此通过position()=1

找出第一个<a>,然后取出title属性值就是书名title。

2、price = li.xpath("./p[@class='price']/span[@class='search_now_price']/text()").extract_first()

价格包含在<li>中的class='price'的<p>元素下面的class='search_now_price'的span元素的文本中

3、author = li.xpath("./p[@class='search_book_author']/span[position()=1]/a/@title").extract_first()

作者包含在<li>下面的class='search_book_author'的<p>

### 当当网爬虫构建方法 #### 构建 Scrapy 爬虫项目 为了使用 Python 的 Scrapy 框架来爬取当当网数据,可以按照以下方式操作。首先需要创建一个新的 Scrapy 项目并初始化环境。 启动新的 Scrapy 项目可以通过如下命令完成: ```bash scrapy startproject dangdang ``` 接着,在 `dangdang` 项目的根目录下生成具体的 Spider 文件用于定义爬取逻辑: ```bash scrapy genspider -t basic dd dangdang.com ``` 这一步会自动在 `spiders` 子目录中生成名为 `dd.py` 的文件,其中包含了基本的爬虫模板代码[^1]。 --- #### 定义爬取的数据模型 在 Scrapy 中,通常会在 `items.py` 文件中定义所需抓取字段的具体结构。对于当当网的商品信息,可能涉及以下几个主要字段: - 图书标题 (`title`) - 商品链接 (`link`) - 单价 (`price`) - 用户评论数 (`comment`) - 评论页面链接 (`commentlink`) 以下是 `items.py` 文件中的具体实现代码: ```python import scrapy class DangdangItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() price = scrapy.Field() comment = scrapy.Field() commentlink = scrapy.Field() ``` 此部分代码明确了所要提取的信息及其对应的字段名称[^2]。 --- #### 编写 Spider 类 Spider 是整个爬虫的核心部分,负责实际访问目标网站、解析 HTML 数据以及提取有用信息。下面是一个单的 Spider 实现例子,假设我们希望从当当网上获取某些书籍的基本详情: ```python import scrapy from ..items import DangdangItem class DangDangSpider(scrapy.Spider): name = 'dangdang' allowed_domains = ['dangdang.com'] start_urls = ['http://category.dangdang.com/cp01.00.00.00.00.00.html'] def parse(self, response): books = response.css('ul.bigimg li') for book in books: item = DangdangItem() item['title'] = book.css('a::text').get().strip(), item['link'] = book.css('a::attr(href)').get(), item['price'] = book.css('.search_now_price::text').re(r'¥(.*)')[0], yield item next_page_url = response.css('#page a:last-child::attr(href)').extract_first() if next_page_url is not None and "javascript:" not in next_page_url: yield response.follow(next_page_url, callback=self.parse) ``` 上述脚本实现了对单页内的所有图书条目进行遍历读取,并尝试跳转至下一页面继续采集更多记录的功能^[]^。 --- #### 动态加载网页 (Selenium 方法) 如果遇到 JavaScript 渲染后的动态内容,则单纯依靠 Scrapy 可能无法满足需求。此时可引入 Selenium 工具辅助模拟真实浏览器行为加载完整的 DOM 结构后再交给 Scrapy 进行进一步处理。 安装必要的依赖库后即可编写类似这样的程序片段: ```python from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver import Chrome chrome_options = Options() driver = Chrome(options=chrome_options) url = "https://www.example-dangdang-page/" driver.get(url) elements = driver.find_elements(By.CLASS_NAME,"item-info") for element in elements : print(element.text) driver.quit() ``` 这段示例展示了如何利用 Selenium 访问指定 URL 并定位特定 CSS 节点从而收集相关文本信息的过程[^3]^[]^。 --- #### 数据持久化存储方案 最后考虑将获得的结果保存下来以便后续分析或者展示用途。常见的做法包括但不限于 CSV 文件导出、关系型数据库(MySQL) 或者 NoSQL 数据库存储(MongoDB)等方式。 例如向 MySQL 插入新纪录的操作大致像这样子: ```sql INSERT INTO books(title,url,price) VALUES (%s,%s,%s); ``` 而对应于 Python 应用层面上则需借助 PyMySQL 驱动器执行 SQL 查询语句. ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值