import scrapy
from ajk.items import AjkItem
class AjkDataSpider(scrapy.Spider):
name = 'ajk_data'
#allowed_domains = ['suzhou.anjuke.com']
start_urls = ['https://suzhou.anjuke.com/sale/gaoxinsz/']
#高新区一级解析 获取
def parse(self, response):
#解析:名称和内容
li_list = response.xpath('//ul[@id="houselist-mod-new"]/li')
#all_data = []#存储所有解析到数据
for li in li_list:
item = AjkItem()
item['house_type'] = li.xpath('./div[2]/div[2]/span[1]/text()').extract() #房屋户型
item['floorage'] = li.xpath('./div[2]/div[2]/span[2]/text()').extract() #建筑面积
item['storey'] = li.xpath('./div[2]/div[2]/span[3]/text()').extract() #所在楼层
item['Construction_time'] = li.xpath('./div[2]/div[2]/span[4]/text()').extract() #建筑时间
item['Total_price'] =li.xpath('./div[3]/span[1]/strong/text()').extract() #房屋总价
li_url = li.xpath('./div[2]/div[1]/a/@href').extract()[0] #这个地方爬取url内容会自动多出很多不存在字符
print(li_url)
yield scrapy.Request(url=li_url,meta={'item':item},callback=self.parse_two)
#详细页解析
def parse_two(self, response):
item = response.meta['item']
item['Unit_Price'] =response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[3]/div[2]/text()').extract()
item['community'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[1]/div[2]/a/text()').extract()
item['position'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[4]/div[2]/p/a[2]/text()').extract()
item['House_category'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[10]/div[2]/text()').extract()
item['property_right'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[13]/div[2]/text()').extract()
item['renovation'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[12]/div[2]/text()').extract()
item['Housing_years'] = response.xpath('//*[@id="content"]/div[3]/div[1]/div[3]/div/div[1]/ul/li[15]/div[2]/text()').extract()
yield item
Li_url 列表内容是这样的
这个到导致我的parse_two 里边的标签内容获取不到
问题1:我这个获取不到数据是否是这个原因引起
问题2:如果是 是我编写代码问题吗
问题3:li_url 列表中的网址,只是提取‘?’之前数据,再存储 这个提取怎样操作,谢谢
这种情况可能是因为在获取子链接的时候,没有对链接中的特殊字符进行处理,导致链接中包含一些未知字符。可以使用 urllib.parse 模块中的 quote 和 unquote 函数对链接进行编码和解码,避免链接中出现特殊字符。
具体来说,可以在 Spider 的代码中使用 quote 和 unquote 函数进行编码和解码。示例代码如下:
import scrapy
from urllib.parse import urljoin, quote, unquote
class MySpider(scrapy.Spider):
name = "myspider"
start_urls = ["http://example.com/"]
def parse(self, response):
# 获取子链接
sub_links = response.xpath("//a/@href")
for url in sub_links:
# 对链接进行编码和解码
url = urljoin(response.url, url)
encoded_url = quote(url, safe=":/")
decoded_url = unquote(encoded_url)
# 处理链接
# ...
yield scrapy.Request(decoded_url, callback=self.parse_subpage)
def parse_subpage(self, response):
# 处理子页面
# ...
在上面的代码中,我们使用了 quote 函数对链接进行编码,并使用 unquote 函数将编码后的链接解码回来。使用 safe 参数指定哪些字符不需要编码,保留它们在链接中的含义。
通过对链接进行处理,可以避免链接中出现特殊字符,从而避免在爬取过程中出现未知字符。