网络爬虫丨基于scrapy+mysql爬取博客信息
以下是一个使用Scrapy框架和MySQL数据库的简单示例来爬取博客信息的代码框架。请注意,这只是一个起点,您需要根据实际的博客网站调整爬虫的具体实现。
- 安装Scrapy和MySQLdb(或者使用pymysql)。
- 创建一个新的Scrapy项目。
- 定义Item容器来存储爬取的数据。
- 编写爬虫(Spider)来提取博客信息。
- 编写管道(Pipeline)来将数据存储到MySQL数据库。
# items.py
import scrapy
class BlogItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
content = scrapy.Field()
tags = scrapy.Field()
# spiders/blog_spider.py
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from myproject.items import BlogItem
class BlogSpider(CrawlSpider):
name = 'blog_spider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com/blog']
rules = (
Rule(LinkExtractor(allow=r'/blog/\d+'), callback='parse_item', follow=False),
)
def parse_item(self, response):
item = BlogItem()
item['title'] = response.xpath('//h1[@class="title"]/text()').extract_first()
item['author'] = response.xpath('//p[@class="author"]/text()').extract_first()
item['content'] = response.xpath('//div[@class="content"]').extract_first()
item['tags'] = response.xpath('//div[@class="tags"]').extract()
return item
# pipelines.py
import pymysql
class MyProjectPipeline(object):
def __init__(self):
self.conn = pymysql.connect(host='localhost', user='user', password='pass', db='myproject', charset='utf8mb4')
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
insert_sql = """
INSERT INTO blogs (title, author, content, tags)
VALUES (%s, %s, %s, %s)
"""
self.cursor.execute(insert_sql, (item['title'], item['author'], item['content'], item['tags']))
self.conn.commit()
return item
def close_spider(self, spider):
self.cursor.close()
self.conn.close()
# myproject/settings.py
ITEM_PIPELINES = {
'myproject.pipelines.MyProjectPipeline': 300,
}
请注意,上述代码是一个简化示例,您需要根据实际的博客网站调整XPath表达式和数据库连接参数。此外,为了安全起见,数据库的用户名、密码和其他敏感信息不应该硬编码在脚本中,应该使用环境变量或者单独的配置文件来管理。
评论已关闭