使用scrapy采集 广州链接花都区租房信息,起始地址https://gz.lianjia.com/zufang/huadou/pg1/#contentList ,要求获取最近发布的前9页的租房信息的标题,价格,及描述信息,并且存入MySQL数据库中
时间: 2024-12-21 21:28:32 浏览: 6
Scrapy是一个强大的网络爬虫框架,可以用于自动化抓取网站数据。要采集广州花都区租房信息并存储到MySQL数据库,你需要按照以下步骤操作:
1. **安装必要的库**:
- 安装Scrapy: `pip install scrapy`
- 需要MySQL驱动,如`pymysql`: `pip install pymysql`
2. **创建Scrapy项目**:
```sh
scrapy startproject huadou_rental
```
3. **创建Spider**:
在`huadou_rental/spiders`目录下创建一个新的Python文件,例如`huadou_spider.py`。编辑文件内容,导入必要的模块并设置起始URL:
```python
import scrapy
from huadou_rental.items import HuadouRentalItem
class HuadouSpider(scrapy.Spider):
name = 'huadou'
allowed_domains = ['gz.lianjia.com']
base_url = 'https://gz.lianjia.com/zufang/huadou/pg{}/#contentList'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.start_urls = [self.base_url.format(page) for page in range(1, 10)]
# ... 爬取逻辑将在这里编写 ...
```
4. **定义Item**:
在`huadou_rental/items.py`中创建一个Item类,包含标题、价格和描述字段:
```python
import scrapy
class HuadouRentalItem(scrapy.Item):
title = scrapy.Field()
price = scrapy.Field()
description = scrapy.Field()
```
5. **编写爬取逻辑**:
在`HuadouSpider`中,实现解析HTML提取所需信息的函数,比如`parse()`。通常需要使用CSS选择器或XPath来定位元素。
```python
def parse(self, response):
rental_items = response.css('div.property-item') # 根据实际页面结构调整此选择器
for item in rental_items:
title = item.css('h3.title a::text').get() # 获取标题
price = item.css('.price span::text').get() # 获取价格
description = item.css('.des::text').get() # 获取描述
yield HuadouRentalItem(
title=title,
price=price,
description=description
)
```
6. **连接到数据库**:
在`settings.py`中配置数据库连接,添加`ITEM_PIPELINES`项:
```python
ITEM_PIPELINES = {
'mysql_pipelines.MySqlPipeline': 300,
}
MYSQL_PIPELINE settings (示例):
MYSQL_HOST = 'localhost'
MYSQL_USER = 'your_username'
MYSQL_PASSWORD = 'your_password'
MYSQL_DBNAME = 'rental_database'
MYSQL_TABLE_NAME = 'rental_data'
```
7. **编写数据库管道(MySqlPipeline)**:
创建`mysql_pipelines.py`,实现数据库插入功能:
```python
import pymysql
class MySqlPipeline(object):
def __init__(self, mysql_settings):
self.conn = pymysql.connect(**mysql_settings)
def process_item(self, item, spider):
with self.conn.cursor() as cursor:
sql = "INSERT INTO `%s` (title, price, description) VALUES (%s, %s, %s)" % (
mysql_settings['MYSQL_TABLE_NAME'],
pymysql.escape_string(item['title']),
pymysql.escape_string(item['price']),
pymysql.escape_string(item['description'])
)
try:
cursor.execute(sql)
self.conn.commit()
except Exception as e:
print(f"Error: {e}")
self.conn.rollback()
return item
def close_spider(self, spider):
self.conn.close()
```
8. **运行爬虫**:
在命令行中运行`scrapy crawl huadou`,爬虫会开始工作,获取数据并将结果存储到MySQL数据库。
阅读全文