编写代码用Scrapy爬取杭州、福州、广州的十页链家租房数据及其详情页数据
时间: 2024-06-10 07:03:57 浏览: 182
Python Scrapy多页数据爬取实现过程解析
好的,让我来回答您的问题。
首先需要安装Scrapy,可以使用以下命令进行安装:
```
pip install scrapy
```
然后创建一个Scrapy项目:
```
scrapy startproject lianjia
```
接着,在项目的settings.py文件中添加以下代码:
```
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,
}
```
这将安装Random User-Agent中间件,用于随机生成User-Agent头,以防止被网站识别。
然后,在项目的spiders目录下创建一个名为lianjia_spider.py的文件,并添加以下代码:
```
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from lianjia.items import LianjiaItem
class LianjiaSpiderSpider(CrawlSpider):
name = 'lianjia_spider'
allowed_domains = ['lianjia.com']
start_urls = ['https://hz.lianjia.com/zufang/', 'https://fz.lianjia.com/zufang/', 'https://gz.lianjia.com/zufang/']
rules = (
Rule(LinkExtractor(restrict_css='#content > div.content__article > div.content__list > '
'div.content__list--item > div.content__list--item--main > '
'p.content__list--item--title > a'), callback='parse_item',
follow=True),
Rule(LinkExtractor(restrict_css='#content > div.content__article > div.content__pg > '
'div.content__pg--box > a.content__pg--next'),
follow=True)
)
def parse_item(self, response):
item = LianjiaItem()
item['url'] = response.url
item['title'] = response.css('.content__title > h1::text').get().strip()
item['price'] = response.css('.content__aside--title i::text').get()
item['district'] = response.css('.content__info > a:nth-child(1)::text').get().strip()
item['address'] = response.css('.content__info > a:nth-child(2)::text').get().strip()
item['area'] = response.css('.content__aside--list > li:nth-child(1)::text').get().split()[0]
item['layout'] = response.css('.content__aside--list > li:nth-child(2)::text').get().split()[0]
item['orientation'] = response.css('.content__aside--list > li:nth-child(3)::text').get().split()[0]
item['floor'] = response.css('.content__aside--list > li:nth-child(4)::text').get().split()[0]
item['year'] = response.css('.content__aside--list > li:nth-child(6)::text').get().split()[0]
item['source'] = response.css('.content__subtitle > a::text').get()
item['description'] = response.css('.content__article__info *::text').getall()
yield item
```
以上代码实现了爬取杭州、福州、广州链家租房的十页数据及其详情页数据。具体实现过程如下:
- 首先定义了一个名为LianjiaSpiderSpider的类,继承了CrawlSpider类,用于爬取整个网站。
- 其中allowed_domains指定了允许爬取的域名,start_urls指定了起始URL。
- rules定义了两个规则用于提取链接,其中restrict_css是用于指定CSS选择器,callback是用于指定回调函数,follow表示是否跟进链接。
- parse_item方法用于解析每个详情页的数据。
- LianjiaItem是一个新建的类,用于定义要爬取的字段。
最后,在终端中进入项目目录并执行以下命令即可开始爬取:
```
scrapy crawl lianjia_spider -o lianjia.json -t json
```
这将爬取数据并将结果保存在lianjia.json文件中。
阅读全文