import scrapy class LianjiaSpider(scrapy.Spider): name = "lianjia" allowed_domains = ["lianjia.com"] start_urls = [f"https://bj.lianjia.com/zufang/pg{i}/#contentList" for i in range(1,3)] def parse(self, response): full_url = ['https://bj.lianjia.com' + url for url in response.xpath('//div[@class="content__list--item--main"]/p[1]/a/@href').extract()] print(full_url) for i in range(len(full_url)): if i % 2 == 0: all_url = full_url[i] print(all_url) # # 把获得的url再次发送请求 for item in all_url: # self.parse_info是一个解析响应的方法 ''' 回调函数,Scrapy能够在接收到响应后自动调用该函数,并将响应传递给它进行处理。 这使得可以在请求不同页面时使用不同的解析方法来提取数据,实现爬虫的多页面爬取和数据处理功能 ''' yield scrapy.Request(url=item,callback=self.parse_info) # # 处理响应结果 def parse_info(self,response): pass # title = response.xpath("//div[@class='content clear w1150']/p/text()").get().replace(' ','').replace('\n ','') #房源标题 # total_price = response.xpath('//div[@class="content__aside--title"]/span/text()|//div[@class="content__aside--title"]/text()').getall() # price = ''.join(total_price).replace('\n ', '').replace(' \n ', '').replace('\n ','') 这段代码的错误在哪里?为什么会出现这样的问题
时间: 2024-02-14 19:30:18 浏览: 175
这段代码存在一个错误在于 `for item in all_url` 的循环中,`all_url` 是一个字符串,无法直接进行迭代。你需要将 `all_url` 放入一个列表中,然后迭代这个列表来发送请求。
此外,你还需要将发送请求的部分放在合适的位置,以确保在获得所有 `all_url` 之后再发送请求。
以下是修改后的代码示例:
```python
import scrapy
class LianjiaSpider(scrapy.Spider):
name = "lianjia"
allowed_domains = ["lianjia.com"]
start_urls = [f"https://bj.lianjia.com/zufang/pg{i}/#contentList" for i in range(1, 3)]
def parse(self, response):
full_url = ['https://bj.lianjia.com' + url for url in response.xpath('//div[@class="content__list--item--main"]/p[1]/a/@href').extract()]
print(full_url)
all_urls = []
for i in range(len(full_url)):
if i % 2 == 0:
all_urls.append(full_url[i])
print(full_url[i])
# 发送请求
for url in all_urls:
yield scrapy.Request(url=url, callback=self.parse_info)
# 处理响应结果
def parse_info(self, response):
pass
# title = response.xpath("//div[@class='content clear w1150']/p/text()")
# total_price = response.xpath('//div[@class="content__aside--title"]/span/text()|//div[@class="content__aside--title"]/text()').getall()
# price = ''.join(total_price).replace('\n ', '').replace(' \n ', '').replace('\n ','')
```
希望这样能解决你的问题。如果还有其他问题,请随时提问。
阅读全文