python当当网爬虫

   最终要实现的是将当当网上面的书籍信息,书籍名字,网址和评论数爬取,存入到数据库中。(首先要做的是创建好数据库,创建的数据库名字为dd,创建的表为books,字段为title,link,comment)。

1、创建项目 scrapy startproject dangdang

2、进入项目文件夹创建爬虫文件

>scrapy genspider –t basic dd dangdang.com

3、用pycharm打开这个项目

编辑items.py文件

# -*- coding: utf-8 -*-
# Define here the models for your scraped items
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class DangdangItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title=scrapy.Field()
    link=scrapy.Field()
    comment=scrapy.Field()

编辑dd.py

# -*- coding: utf-8 -*-
import scrapy
from dangdang.items import DangdangItem
from scrapy.http import Request
class DdSpider(scrapy.Spider):
    name = 'dd'
    allowed_domains = ['dangdang.com']
    start_urls = ['http://dangdang.com/']
    def parse(self, response):
        item=DangdangItem()
        item['title']=response.xpath('//a[@class="pic"]/@title').extract()
        item['link'] = response.xpath('//a[@class="pic"]/@href').extract()
        item['comment'] = response.xpath('//a[@class="search_comment_num"]/text()').extract()
        yield item
        for i in range(2,101):#循环爬多页的东西
            url='http://category.dangdang.com/pg'+str(i)+'-cp01.54.06.00.00.00.html'
            yield Request(url,callback=self.parse)

在seetings.py文件中打开pipelines

ITEM_PIPELINES = {
   
'dangdang.pipelines.DangdangPipeline': 300,
}

Pipelines.py文件,将数据写入数据库

# -*- coding: utf-8 -*-
# Define your item pipelines here
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
class DangdangPipeline(object):
    def process_item(self, item, spider):
        conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',db='dd')
        for i in range(0,len(item['title'])):
            title=item['title'][i]
            link=item['link'][i]
            comment=item['comment'][i]
            sql="insert into books(title,link,comment)values('"+title+"','"+link+"','"+comment+"')"
            conn.query(sql)
            conn.commit()
       conn.close()
         return item

 

 

 

### 实现当当网图书爬虫 为了实现当当网图书爬虫,需理解其基本工作流程并考虑反爬机制。Python提供了丰富的库来简化这一过程。 #### 准备阶段 安装必要的依赖包: ```bash pip install requests beautifulsoup4 lxml pandas openpyxl ``` 这些工具分别用于发起HTTP请求、解析HTML文档结构、加速DOM树处理速度以及操作Excel文件[^1]。 #### 编写核心逻辑 下面展示了一个简单的抓取程序片段,该脚本会遍历多页书籍列表页面,并提取书名、作者、价格等基本信息保存至CSV文件中。 ```python import csv from bs4 import BeautifulSoup as soup import requests import time def fetch_page(page_num=1): url = f"http://search.dangdang.com/?key=%E8%AE%A1%E7%AE%97%E6%9C%BA&act=input&page_index={page_num}" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) if not response.ok: raise Exception(f"Failed to load page {url}") return response.text def parse_html(html_content): parsed_data = [] sp = soup(html_content,'lxml') items = sp.find_all('li', class_='line') for item in items[:20]: try: title = item.select_one('.name a')['title'] author = item.select_one('.author').get_text(strip=True).split('/')[-2].strip() price = float(item.select_one('.price_n').text.strip().replace('¥','')) record = {'Title': title, 'Author': author, 'Price': price} parsed_data.append(record) except AttributeError: continue return parsed_data if __name__ == '__main__': all_records = [] for i in range(1, 3): # 只获取前两页作为示范 html_doc = fetch_page(i) records = parse_html(html_doc) all_records.extend(records) time.sleep(2) # 防止触发网站防护 keys = ['Title', 'Author', 'Price'] with open('./output.csv', mode='w', newline='', encoding='utf-8') as file_writer: writer = csv.DictWriter(file_writer, fieldnames=keys) writer.writeheader() writer.writerows(all_records) ``` 此代码实现了对指定关键词搜索结果的分页读取与解析功能,同时加入了适当延时以规避潜在的风险措施[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值